从 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 让您的代码审查工具满意。这当然不会以任何方式提高安全性。
我有一个应用程序可以读取数千个包含数据库参数和静态 SQL 语句的平面文件。在我的 java 代码中,我采用 SQL 语句并执行它。由于可能存在 SQL 注入漏洞,这对于 Fortify 是不可接受的。 例如我的平面文件如下所示:
query: SELECT USER_ID FROM SOME_TABLE WHERE ID='2'
我取query
然后执行
我的问题是如何使此类静态 SQL 安全? 有没有办法将这些 SQL 转换为 PreparedStatements?
如果您不根据用户输入更改从您的文件中读取的 SQL 语句,则没有 SQL 注入。
另一方面,如果您不能严格控制此文件中的内容(谁可以编辑它?),那么整个程序就是一个巨大的 SQL 注入器。
即使没有绑定参数,您也可以使用 PreparedStatement 让您的代码审查工具满意。这当然不会以任何方式提高安全性。