我遇到了一个问题,Checkmarx 将我的一项服务标记为具有二阶 SQL 注入漏洞。我试图做一些研究来弄清楚如何解决这个问题,但大多数解决方案似乎都是围绕使用参数的查询。被标记的这个查询不使用任何参数。有问题的代码在这里:
public static final String SELECT_NEXTVAL_FOR = "SELECT NEXTVAL FOR ";
public static final String FROM_SYSIBM = " FROM SYSIBM.SYSDUMMY1";
public static final String CONTACT_ID_TABLE = ".CNTCT_ID";
@Autowired
EntityManager entityManager;
@Value("#{ systemProperties['sequence.schema']}")
String sequenceSchema;
public Integer getNextContactId() {
Query getNextContactIdQuery = entityManager.createNativeQuery(
SELECT_NEXTVAL_FOR + sequenceSchema + CONTACT_ID_TABLE + FROM_SYSIBM);
return (Integer)getNextContactIdQuery.getSingleResult();
}
Checkmarx 给出的信息在这里:
应用程序的 getNextContactId 方法使用 BinaryExpr 执行 SQL 查询,在 src\main\jav 的第 27 行