从 SQL 注入中保护静态 SQL 查询

Securing a static SQL query from SQL Injection

我有一个应用程序可以读取数千个包含数据库参数和静态 SQL 语句的平面文件。在我的 java 代码中,我采用 SQL 语句并执行它。由于可能存在 SQL 注入漏洞,这对于 Fortify 是不可接受的。 例如我的平面文件如下所示:

query: SELECT USER_ID FROM SOME_TABLE WHERE ID='2'

我取query然后执行

我的问题是如何使此类静态 SQL 安全? 有没有办法将这些 SQL 转换为 PreparedStatements?

如果您不根据用户输入更改从您的文件中读取的 SQL 语句,则没有 SQL 注入。

另一方面,如果您不能严格控制此文件中的内容(谁可以编辑它?),那么整个程序就是一个巨大的 SQL 注入器。

即使没有绑定参数,您也可以使用 PreparedStatement 让您的代码审查工具满意。这当然不会以任何方式提高安全性。