java.sql.Statement.execute()
或其任何变体的调用,这些变体会将动态构造的字符串作为要执行的查询。
构造的 SQL 语句是安全漏洞的常见来源。 默认情况下,此检查会忽略编译时常量。
示例:
ResultSet execute(Statement statement, String name) throws SQLException { return statement.executeQuery("select * from " + name); // 报告警告 }
使用检查选项将任何 static
final
字段视为常量。
请小心,因为启用该选项时,像下面这样的字符串将被忽略:
private static final String SQL = "SELECT * FROM user WHERE name='" + getUserInput() + "'";