Java IBM Appscan安全漏洞SQL注入

Java IBM Appscan安全漏洞SQL注入,java,security,jdbc,Java,Security,Jdbc,我有应用程序扫描,通过它我可以扫描我的项目,但在语句中 preparedStatement = conn.prepareStatement(sql); 存在SQL.Injection漏洞,我正在使用esapi设置准备语句中的值,例如 preparedStatement.setString(1 , OracleEncoder.encode(code) ); OracleEncoder正在这样做 ESAPI.encoder().encodeForSQL( ORACLE_CODEC,pa

我有应用程序扫描,通过它我可以扫描我的项目,但在语句中

 preparedStatement = conn.prepareStatement(sql);
存在SQL.Injection漏洞,我正在使用esapi设置准备语句中的值,例如

preparedStatement.setString(1 , OracleEncoder.encode(code) ); 
OracleEncoder正在这样做

   ESAPI.encoder().encodeForSQL( ORACLE_CODEC,param);

知道如何修复此漏洞吗?

您不需要将绑定参数编码到preparedStatement

// preparedStatement.setString(1 , OracleEncoder.encode(code) ); 
preparedStatement.setString(1 , code ); 
报告的有关部分说,

驱动程序将其发送到数据库时,会将其转换为SQL VARCHAR或LONGVARCHAR值(取决于参数相对于驱动程序对VARCHAR值的限制的大小)


假设您正在进行静态分析,appscan没有ESAPI的标记,您应该在appscan中为encodeForSQL方法创建SQLi验证程序标记。这样,下次扫描时,扫描引擎将获取新的标记,并了解通过esapi调用消除SQLi威胁。

如果在代码中使用esapi库函数和预处理语句,则可以将此问题标记为非问题。 Prepared语句是避免SQL注入的缓解技术之一

preparedStatement = conn.prepareStatement(sql);

好的,我知道了,还有IBM应用程序扫描漏洞,因为它抱怨我写你的方式或mine@Haider你的方式根本行不通。至于IBM应用程序扫描,请与IBM联系。您可能想阅读有关边界的文章parameters@PaulBastide不知道存在(security.stackexchange…)