我正在从事一个项目,其中有一段代码如下所示:
String sql = "SELECT MAX(" + columnName + ") FROM " + tableName;
PreparedStatement ps = connection.prepareStatement(sql);
有什么方法可以更改此代码,以便 FindBugs 停止给我一个 “安全性 - 准备好的语句是从非常量字符串生成的”警告?
请假设此代码对于 SQL INJECTION 是安全的,因为我可以在代码的其他地方控制可能的 “tableName”和“columnName”的值(它们不直接来自用户输入)。
最佳答案
不要通过+ 连接sql 字符串。你可以使用
String sql = String.format("SELECT MAX(%s) FROM %s ", columnName, tableName);
这比连接字符串慢,因此您应该初始化此 static 然后这不是问题。
我认为使用 StringBuilder 也会修复此警告。
避免此警告的另一种方法是在该字符串(或方法/或类)上方添加 @SuppressWarnings("SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING")。
你也可以使用 Filter File定义应排除的规则。
关于java - 如何避免 "Security - A prepared statement is generated from a nonconstant String"FindBugs 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10500305/