即使我正在使用PreparedStatment,我也有一个被注入SQL注入的veracode扫描标记的类。我无法确定问题所在,或者扫描是否可能出现误报。请参考下面的代码(QueryBuffer是一个使用StringBuffer的自定义类):
List<ReferralService> list = new ArrayList<ReferralService>();
QueryBuffer sql = new QueryBuffer();
sql.addSql("SELECT rs.id FROM referral_service rs ");
sql.addSql("WHERE ");
sql.addSql("rs.closed = ? AND ");
sql.addSql("rs.workflow_id = ? ");
sql.addSql("ORDER BY submitted_on ASC limit 200");
PreparedStatement prepStmt = conn.prepareStatement(sql.toString());
prepStmt.setInt(1, 0);
prepStmt.setInt(2, liTeamID);
ResultSet rs = prepStmt.executeQuery();
看起来veracode对字符串连接不满意。
当(另一个)开发人员将扩展代码并向字符串添加不好的东西(如变量)时,它可能会在将来发生。
所以请避免使用所有这些addSql字符串。