【发布时间】:2017-01-22 10:54:47
【问题描述】:
我正在进行一个 LDAP 调用,其中我需要使用用户输入到 LDAP 过滤器中的字符串。我已通过从字符串中删除所有非字母数字字符来清理数据。
public static String alphanumericOnly(String input) {
return input == null ? "" : input.replaceAll("\\W|_", "");
}
但是,HP Fortify 将交换标记为 LDAP 注入漏洞,尽管我已尽职尽责确保不存在可以执行 LDAP 注入攻击的 LDAP 元字符。
我正在寻找一种方法来欺骗 HP Fortify,使其不会标记此交互。
我注意到在 HP Fortify 的其他用途中,如果我的字符串输入是整数,我可以将其解析为 int(在本例中为 BigInteger),然后我可以在字符串中使用它,HP Fortify 将忽略它检查日志伪造:
BigInteger id = new BigInteger(ValueChecker.numericOnly(request.getID()));
logger.info(id + " - Request Received.");
在我看来,可能有类似的方法可以诱使 HP Fortify 忽略 LDAP 注入问题,因为我已经验证了数据。
我尝试的简单解决方法无效:
将 String 转换为 char 数组,然后再转换回 String
将每个字符放入字节数组,然后转换回字符串
将字符串转换为对象,然后再转换回字符串
我不想隐藏或压制 Fortify 的发现。我想欺骗/解决 Fortify 以便它们根本不会被标记。
有什么想法吗?
【问题讨论】:
-
如果您仍然面临类似的问题,也许在 cud 帮助下。 owasp.org/index.php/Preventing_LDAP_Injection_in_Java
标签: java ldap code-injection fortify