1

我正在尝试开发一些应用程序并使用 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);

通过上述更改,问题也没有解决。

有什么想法可以解决这个问题吗?

4

1 回答 1

2

似乎 Checkmarx 将您的代码标记为易受 LDAP 注入攻击是正确的。

什么是 LDAP 注入?

LDAP 查询中使用的特殊元素的不正确中和(“LDAP 注入”)

该软件使用来自上游组件的受外部影响的输入来构建全部或部分 LDAP 查询,但它不会中和或错误地中和特殊元素,这些元素在发送到下游组件时可能会修改预期的 LDAP 查询。

引自CWE-90:LDAP 查询中使用的特殊元素的不当中和(“LDAP 注入”)

如何缓解?

防止 LDAP 注入需要准确的编码和安全的服务器配置。前端应用程序应执行输入验证并限制所有潜在的恶意符号。开发人员可以使用正则表达式来验证不受信任的输入。以下正则表达式可以通过仅允许数字和字母来限制潜在攻击的范围:

/[^0-9a-z]/i

执行外发数据过滤作为额外的安全级别。不要输出与应用程序功能无关的信息。对 LDAP 目录中的数据实施正确的访问控制,对用户对象设置适当的权限并禁用对目录对象的匿名访问。

引用和示例取自LDAP 注入漏洞 | CWE-90 弱点 | 开发与修复

于 2017-01-02T11:40:19.667 回答