php Ldap消毒和ldap绑定

时间:2019-05-20 14:08:43

标签: php ldap

我正在尝试使用ldap对用户进行身份验证。我有上面的代码用于清理用户输入。

function ldapSanitize($val) {
    $sanitized=array('\\' => '\5c',
                     '*' => '\2a',
                     '(' => '\28',
                     ')' => '\29',
                     "\x00" => '\00');

    return str_replace(array_keys($sanitized),array_values($sanitized),$val);

我这样称呼ldapSanitize作为用户名和密码

$uname = ldapSanitize($username);
$pass = ldapSanitize($password);

并且我使用绑定来验证用户

 $ad = @ldap_connect(Config::ldaphost);
    if ($ad) {
        $bind = @ldap_bind($ad, $uname, $pass);
        if ($bind) {
            return true;
        }
    }
    return false;

我的问题是,如果密码带有*字符,它将转换为\ 2a,并且认证失败。例如,如果密码是“ somepassword *”,它将更改为“ somepassword \ 2a”,并且绑定将失败。

所以我想知道如何清理密码但还能通过绑定进行身份验证。

1 个答案:

答案 0 :(得分:0)

您不应该清理密码。 RFC 4511指出,文本密码应作为UTF-8传输。非文本密码不得更改。

LDAP服务器将密码视为八位字节字符串。