IBM Appscan安全漏洞SQL注入

时间:2014-08-01 13:23:34

标签: java security jdbc

我有应用程序扫描,我扫描我的项目,但在

等语句
 preparedStatement = conn.prepareStatement(sql);

存在SQL.Injection漏洞,我使用esapi api在预准备语句中设置值,例如。

preparedStatement.setString(1 , OracleEncoder.encode(code) ); 

OracleEncoder正在执行此操作

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

任何想法如何解决这个漏洞?

3 个答案:

答案 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);