如何避免JavaFX桌面应用程序中的SQL注入和其他安全故障

如何避免JavaFX桌面应用程序中的SQL注入和其他安全故障,sql,javafx,sql-injection,Sql,Javafx,Sql Injection,在JavaFX桌面应用程序中是否有任何方法可以避免SQL注入和其他安全故障?如果是,我该怎么做?攻击与最终用户故意发送到数据库的恶意语句有关,而从用户的角度来看,JavaFX是前端 也就是说,假设您有一个登录屏幕来输入用户和密码。你能阻止用户输入下列句子之一而不是他们的真实用户名吗 删除表用户-或 从1=1的用户中删除; 您可以验证文本,查找某些关键字,如DROP、INSERT、UPDATE或DELETE。但它值得吗?可能会,这取决于用户尝试进行此类攻击的可能性 但是,减轻和阻止SQL注入的最佳

在JavaFX桌面应用程序中是否有任何方法可以避免SQL注入和其他安全故障?如果是,我该怎么做?

攻击与最终用户故意发送到数据库的恶意语句有关,而从用户的角度来看,JavaFX是前端

也就是说,假设您有一个登录屏幕来输入用户和密码。你能阻止用户输入下列句子之一而不是他们的真实用户名吗

删除表用户-或 从1=1的用户中删除; 您可以验证文本,查找某些关键字,如DROP、INSERT、UPDATE或DELETE。但它值得吗?可能会,这取决于用户尝试进行此类攻击的可能性

但是,减轻和阻止SQL注入的最佳方法是从连接本身开始。通常,您希望使用具有较少必要操作权限的用户连接到数据库。通常的做法是创建一个专门的用户来进行登录,例如,以只读方式访问Users表,如果您有兴趣保留会话日志,可以插入和更新会话表。当然:

创建由“密码”标识的用户“登录用户”@“%”; 将MyDataBase.*上的使用权授予“登录用户”@“%”; 将SELECT ON用户授予“登录用户”@“%”; 将会话上的插入、更新授予“登录用户”@“%”; 注意:该代码段基于MySQL,但同样的概念也适用于其他RDBMS

在这种情况下,如果最终用户成功地将上述语句之一发送到数据库,则建立连接的db用户将没有足够的权限执行这些语句,并将导致SQL异常。这同样适用于其他实体,只需为db用户提供较少的权限来操作sensistive数据

此外,JDBC提供了一个接口,该接口旨在通过使用占位符构建语句来避免SQL注入。例如:

String sql = "SELECT * FROM Users WHERE username = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, userName);

在将语句发送到数据库之前,userName参数将被包装成文本,因此如果用户键入上述恶意语句之一,它们将不会产生任何效果。另外,如果您想执行多个句子,您必须使用由开发人员控制的句子,这样会更安全。

我不知道javafx,但您的问题的答案很可能是肯定的,有。防止其他安全故障的范围太广,无法得到合理的回答。