我有应用程序扫描,我扫描我的项目,但在
等语句 preparedStatement = conn.prepareStatement(sql);
存在SQL.Injection漏洞,我使用esapi api在预准备语句中设置值,例如。
preparedStatement.setString(1 , OracleEncoder.encode(code) );
OracleEncoder正在执行此操作
ESAPI.encoder().encodeForSQL( ORACLE_CODEC,param);
任何想法如何解决这个漏洞?
答案 0 :(得分:1)
假设您正在进行静态分析,appscan没有为您的ESAPI API添加标记,您应该在appscan中为您的encodeForSQL方法创建一个SQLi验证器标记。这样,下次扫描时,扫描引擎将获取新标记并理解esapi调用中和SQLi威胁。
答案 1 :(得分:0)
您不需要将绑定参数编码到preparedStatement,
// preparedStatement.setString(1 , OracleEncoder.encode(code) );
preparedStatement.setString(1 , code );
PreparedStatement.setString()
JavaDoc的相关部分说,
驱动程序在将数据发送到数据库时将其转换为SQL VARCHAR或LONGVARCHAR值(取决于相对于驱动程序对VARCHAR值的限制的参数大小)。
答案 2 :(得分:0)
如果在代码中使用ESAPI库函数和预准备语句,则可以标记此问题不是问题。 准备语句是避免SQL注入的缓解技术之一。
preparedStatement = conn.prepareStatement(sql);