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 注入攻击。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。