我们使用find-sec-bugs和 findbugs 来查找代码中的潜在问题。我们使用 Spring JDBCTemplate 进行数据库访问,并且find-sec-bugs
似乎认为我们到处都有 SQL 注入漏洞。最简单的例子如下:
public class MyDataRepo {
private final String getDataSql;
public PilotRepositoryImpl(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
getDataSql = "SELECT ID, FIRST_NAME, LAST_NAME, USERNAME, EMAIL FROM USERS WHERE COMPANY_ID = ? AND ID = ?";
//...
}
public MyData getMyData(String companyId, UUID userId)
{
return jdbcTemplate.queryForObject(getDataSql, new Object[]{companyId, userId}, myDataRowMapper);
}
}
这导致它认为它容易受到 SQL 注入的影响,但显然不是(如果我错了,请纠正我)。
如果我将字符串直接复制并粘贴到这样的方法中:
return jdbcTemplate.queryForObject("SELECT ID, FIRST_NAME, LAST_NAME, USERNAME, EMAIL FROM USERS WHERE COMPANY_ID = ? AND ID = ?", new Object[]{companyId, userId}, myDataRowMapper);
然后它认为它很好。我喜欢在课堂顶部定义 SQL,而不是埋在每个方法中。我真的不想@SuppressFBWarnings
到处添加,因为这几乎违背了目的。
有没有更好的方法来解决这个问题?我们正在做的事情真的有问题吗?