Trick/Workaround HP Fortify LDAP 注入查找
Trick/Workaround HP Fortify LDAP Injection Finding
我正在进行 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 注入问题,因为我已经验证了数据。
我尝试过的简单解决方法没有奏效:
将字符串转换为字符数组,然后返回字符串
将每个字符放入字节数组,然后转换回字符串
将字符串转换为对象,然后返回字符串
我不想隐藏或压制 Fortify 的调查结果。我想 trick/workaround 强化,这样它们就不会被标记。
有什么想法吗?
我明白了。这可以通过将 String 转换为代码点的 int 数组然后将其转换回来来完成。这提供了足够的间接手段来欺骗 Fortify,并且问题不会被标记。
public static String scrub(String input) {
// remove all non-alphanumeric characters
String sanitized = alphanumericOnly(input);
// trick Fortify by storing chars
// as codepoints in an int array
int[] codepoints = new int[sanitized.length()];
for(int i = 0; i < sanitized.length(); ++i) {
codepoints[i] = sanitized.codePointAt(i);
}
return new String(codepoints, 0, codepoints.length);
}
我正在进行 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 注入问题,因为我已经验证了数据。
我尝试过的简单解决方法没有奏效:
将字符串转换为字符数组,然后返回字符串
将每个字符放入字节数组,然后转换回字符串
将字符串转换为对象,然后返回字符串
我不想隐藏或压制 Fortify 的调查结果。我想 trick/workaround 强化,这样它们就不会被标记。
有什么想法吗?
我明白了。这可以通过将 String 转换为代码点的 int 数组然后将其转换回来来完成。这提供了足够的间接手段来欺骗 Fortify,并且问题不会被标记。
public static String scrub(String input) {
// remove all non-alphanumeric characters
String sanitized = alphanumericOnly(input);
// trick Fortify by storing chars
// as codepoints in an int array
int[] codepoints = new int[sanitized.length()];
for(int i = 0; i < sanitized.length(); ++i) {
codepoints[i] = sanitized.codePointAt(i);
}
return new String(codepoints, 0, codepoints.length);
}