我正在尝试使用checkmarx开发一些应用程序并扫描我的代码,并在下面的方法中解决了LDAP注入问题。
Update(request.getparameter("userID"))
我们正在调用此方法并使用request.getparameter()来获取相应的值,checkmarx在request.getparameter(“userID”)中显示问题,
问题说明 “然后,此元素的值会在没有经过适当清理或验证的情况下流经代码,并最终在方法中的LDAP查询中使用”
以下是我尝试过的方法之一
String userID = request.getparameter("userID");
if(userID == null && userID.isEmpty){
throw new ServletException();
}
else
Update(userID);
如果上述更改也未解决问题。
有什么想法解决这个问题吗?
答案 0 :(得分:2)
似乎Checkmarx在将您的代码标记为易受LDAP注入攻击时是正确的。
什么是LDAP注入?
LDAP查询中使用的特殊元素的中和不当('LDAP注入')
该软件使用来自上游组件的外部影响输入构建全部或部分LDAP查询,但它不会中和或错误地中和可能在将其发送到下游组件时修改预期LDAP查询的特殊元素。 / p>
引自CWE-90: Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection')
如何缓解?
防止LDAP注入需要准确的编码和安全的服务器配置。 前端应用程序应执行输入验证并限制所有潜在的恶意符号。开发人员可以使用正则表达式来验证不受信任的输入。以下正则表达式可以通过仅允许数字和字母来限制潜在攻击的范围:
/[^0-9a-z]/i
执行传出数据的过滤,作为额外的安全级别。 不要输出与应用程序无关的信息 功能。对数据内的数据实施正确的访问控制 LDAP目录,为用户对象设置适当的权限 禁用对目录对象的匿名访问。
来自LDAP Injection Vulnerability | CWE-90 Weakness | Exploitation and Remediation
的引用和示例