工具在Java JDBC代码检测非参数化的SQL
-
19-08-2019 - |
题
我期待检查用Java / JDBC代码的SQL语句,以确保将要执行的SQL是可接受的质量。无论是PMD不FindBugs的似乎有JDBC或SQL规则。我可以用P6SPY登录的SQL,看看这样,但这是手册。
我想知道如果使用PMD / FindBugs的/等来创建任何字符串传递给一个PreparedStatement的规则那里是战略的“=”或“在”只参数化在比较侧VARS。
有没有人这样做呢?或通过其它手段做呢?
解决方案
这是一个棘手的问题。比较运算符像=
和IN()
的一些情况,但也有:!= <> < <= > >= LIKE
如何你发现表达式插值应用程序变量作为文字的情况下?
String sql = "SELECT *, " + someJavaVar + " AS constant_column FROM mytable";
您可以搜索包含SQL字符串分隔符,但SQL注入不从内插字符串文字只来。
您将如何发现插值应用程序变量作为比数据值以外的东西的情况?
String sql = "SELECT * FROM mytable ORDER BY " + columnname;
我不知道任何自动的方法来检测SQL注入缺陷。代码审查是发现它们更有效的方式。在包含插值应用程序变量的每个SQL语句,你必须确认应用程序变量是“安全”和您的应用程序已经明确地验证它们或进行改造,以便它们不包含危险的有效载荷。
其他提示
你有完全测试与连接到它的调试器的应用程序的能力?
在您的JDBC驱动程序的执行Connection.createStatement()的设置一个断点,并运行应用程序...(或者,如果使用它你没有源代码的驱动程序,写一个假的驱动程序,只是委托调用真钞和日志的createStatement的所有实例())
不隶属于 StackOverflow