【发布时间】:2023-04-03 13:53:01
【问题描述】:
我有一个应用程序可以读取数千个包含数据库参数和静态 SQL 语句的平面文件。在我的 java 代码中,我使用 SQL 语句并执行它。由于可能存在 SQL 注入漏洞,这对于 Fortify 来说是不可接受的。 例如我的平面文件如下所示:
query: SELECT USER_ID FROM SOME_TABLE WHERE ID='2'
我接受query 并执行它。
我的问题是如何使这样的静态 SQL 安全? 有没有办法将这些 SQL 转换为 PreparedStatements?
【问题讨论】:
-
那么整个语句被执行了吗?我不认为有资格作为 SQL 注入。可能更多地与围绕可以执行的查询的安全性相关。也许在数据库中设置一个特殊的应用程序用户,具有有限的权限(例如,只能从数据库中读取,不能创建/更新/删除任何东西)。或者,如果您想隐藏某些数据,请仅公开数据库上可以选择的视图,而不是整个表。您还需要一个安全层来保护文件不被编辑。
-
文件是如何生成的
-
@Luke 是的,你是对的,这不符合 SQL 注入的条件,因为平面文件对于任何会导致一些安全问题的编辑都是安全的。唯一的问题是带有漏洞的强化扫描。
-
@Strawberry 是手写文件
标签: java mysql prepared-statement sql-injection fortify