作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在从事一个项目,其中有一段代码如下所示:
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/
我是一名优秀的程序员,十分优秀!