2

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

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

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

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

4

3 回答 3

2

当然,在源代码中进行查询是不安全的。

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

UPDATE users SET password=? WHERE username=?
于 2013-10-23T12:33:14.787 回答
0

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

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

谢谢你。

于 2013-10-23T12:34:01.857 回答
0

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

我将详细说明将 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 代码中,但它仍然驻留在您的一个应用程序包中。

于 2013-10-23T12:43:07.850 回答