SV.LDAP
当将未检查的用户输入用于 LDAP 查询的筛选器部分时,会检测到该错误。
从 2023.2 版本开始,此检查器将支持 Jakarta EE。
缓解与预防
可以通过验证所有来自应用程序外部的输入(例如用户输入、文件输入、系统参数等)防止 LDAP 注入攻击。要筛选用户数据,最好的方法是使用仅包括允许的字符类型的黑名单正则表达式。确保 LDAP 查询筛选器尽可能具体。如果需要允许使用任何特殊符号,则确保对其进行转义。
Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。
示例 1
复制
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String filter = req.getParameter("filter");
NamingEnumeration<SearchResult> namingEnumeration = context.search(name, filter, null);
while (namingEnumeration.hasMore()) {
SearchResult searchResult = namingEnumeration.next();
Attribute attribute = searchResult.getAttributes().get("");
if (ATTRIBUTE_TYPE.equals(attribute.getID())) {
resp.getOutputStream().println(attribute.get() + ";");
}
}
} catch (NamingException e) {
throw new ServletException("LDAP failure", e);
}
}
针对第 27 行报告 SV.LDAP:在第 26 行中将未验证的用户输入存储在用作 LDAP 筛选器的“filter”中。此筛选器可能包含任意内容,而且使服务器容易受到 LDAP 注入攻击。
外部指导
扩展
此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。