我期待检查用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的所有实例())

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top