如何防止LDAP注入

Chr*_*ris 8 php ldap code-injection

我们正在构建一个通过php使用LDAP的应用程序,我开始想到有什么办法可以注入到LDAP中,更好的是如何防止LDAP注入?

Ste*_*rig 9

构建LDAP过滤器时,必须确保根据RFC2254处理过滤器值:

任何具有ACII代码<32的控制字符以及在LDAP过滤器中具有特殊含义的字符"*","(",")"和"\"(反斜杠)都将转换为反斜杠的表示形式,然后是两个十六进制数字,表示字符的十六进制值.

Zend_Ldap 例如,使用以下例程

//[...]
$val = str_replace(array('\\', '*', '(', ')'), array('\5c', '\2a', '\28', '\29'), $val);
for ($i = 0; $i<strlen($val); $i++) {
    $char = substr($val, $i, 1);
    if (ord($char)<32) {
        $hex = dechex(ord($char));
        if (strlen($hex) == 1) $hex = '0' . $hex;
        $val = str_replace($char, '\\' . $hex, $val);
    }
}
//[...]
Run Code Online (Sandbox Code Playgroud)