我有一个类,即使我使用PreparedStatment,也可以通过veracode扫描将其标记为SQL注入。我无法确定问题出在哪里,或者无法确定扫描是否有误报。请参考下面的代码(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对字符串连接不满意。
当(另一位)开发人员扩展代码并向字符串中添加不良内容(如变量)时,将来可能会发生更多的SQL注入。
因此,请避免使用所有这些addSql字符串。
关于java - 如何用准备好的语句修复SQL注入(inject)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55513830/