【问题标题】:How to securely implement SQL queries in a Java desktop app如何在 Java 桌面应用程序中安全地实现 SQL 查询
【发布时间】:2013-10-23 12:27:03
【问题描述】:

我正在创建一个 Java 桌面应用程序,用于生成用户密码并将其存储在数据库中。

我的问题是:在应用程序中实现 SQL 查询最安全的方法是什么?

当然,在源代码中包含查询是不安全的。我的解决方法是将 db 文件存储在本地,但我更愿意将数据存储在外部服务器上。

那么我如何在 Swing 应用程序中实现 SQL 查询而不嵌入源代码。

【问题讨论】:

  • 让 swing 应用程序与服务器通信(使用 RMI、Web 服务或其他),并在服务器代码中执行 SQL 查询。
  • 如果您可以选择移动数据,为什么不在服务器端为您维护一个 Web 服务呢?访问数据库比访问 SQL 查询更令人担忧。

标签: java sql swing


【解决方案1】:

在源代码中包含查询当然是不安全的。

我从未见过敏感的 SQL 查询。通常,您接受来自用户的敏感数据(例如,在 Swing 字段中输入密码)并使用它来填充现有的参数化查询,例如

UPDATE users SET password=? WHERE username=?

【讨论】:

    【解决方案2】:

    无需保护查询文本。您可能对查询使​​用的参数的日志记录感到担忧。如果您将原始密码存储在数据库中,这是一个问题。所以我建议首先不要存储raw passwords

    我将详细说明将 SQL 嵌入到 Java 代码中。如果您的应用程序使用数据库,您需要调用数据库,这意味着执行 SQL 语句。避免这种情况的唯一方法是将这项工作委托给另一个应用程序,这样您的应用程序将不使用 SQL,而是使用一些自定义协议/API,并且该应用程序将代表它执行 SQL 查询。

    您可以将 SQL 与 Java 代码分开存储,但这不是出于安全考虑,主要是因为需要更正确地构建您的应用程序。不将 SQL 嵌入 Java 代码的主要驱动力是代码可读性、性能、维护和代码重用。

    在访问数据库时使用 ORM 是一种常见的做法。在这种情况下,您的应用程序根本没有 SQL 代码而是通过 ORM API 访问数据库的情况并不少见。例如在休眠状态下,查询可能看起来像

    User user = session.createCriteria(User.class)
        .add( Restrictions.eq("name", userName) )
        .uniqueResult();
    

    即使您需要执行一些您选择的 ORM 不直接支持的 SQL 查询,SQL 文本本身通常也存储在一些随附的 xml 文件中。

    请注意,在后一种情况下,尽管从技术上讲 SQL 并未嵌入到 Java 代码中,但它仍驻留在您的一个应用程序包中。

    【讨论】:

    • 加密密码很少是比salting and hashing更好的选择。
    • 我完全理解这个概念,感谢您的回复。在 Java 源代码中包含连接到外部数据库的 SQL 代码是否安全,该软件的其他用户也将在该数据库中存储他们的详细信息。例如,用户将输入他们的姓名并生成加密密码,然后将该密码上传到数据库。所以对我来说,在源代码中包含 SELECT 和 UPDATE 语句是个好主意吗?
    • 我添加了更多关于将 SQL 嵌入 Java 代码的信息。
    【解决方案3】:

    我不知道你想如何在你的应用程序中执行某些东西而不实现它。我只是不明白你的方法。您可能想要注册新用户或其他东西,并且您不想以任何方式透露您的数据库结构,对吗?你不能做这样的事情来直接在 DB 上操作(通过 sql)而不是把它编码到 app.js 中。

    解决方案: 为您的需求创建专用的 REST API。所有数据库操作处理都将在服务器端(哈哈,您需要服务器 - 可以是简单的 apache 托管 php)所以没有数据库结构启示等。您需要做的就是向服务器发送带有适当数据的命令 - 用户名和密码.为了获得最大的安全性,您应该使用 SSL 与 API 通信。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多