IBM Appscan安全漏洞SQL注入

问题描述 投票:0回答:3

我有应用扫描,可以通过它扫描我的项目,但使用类似的语句

 preparedStatement = conn.prepareStatement(sql);

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

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

OracleEncoder正在执行此操作

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

任何想法我该如何解决此漏洞?

java security jdbc
3个回答
1
投票

假设您正在执行静态分析,appscan不会为您的ESAPI API标记,您应该在appscan中为您的encodeForSQL方法创建一个SQLi验证器标记。这样,下次扫描时,扫描引擎将获取新标记并了解esapi调用已消除了SQLi威胁。


0
投票

您不需要将绑定参数编码为prepareStatement,

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

PreparedStatement.setString() JavaDoc的相关部分说,

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


0
投票

如果您在代码中使用ESAPI库函数和准备好的语句,则可以将此问题标记为不是问题。准备语句是避免SQL注入的缓解技术之一。

preparedStatement = conn.prepareStatement(sql);

© www.soinside.com 2019 - 2024. All rights reserved.