Php Ldap Sanitizing и ldap bind - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь аутентифицировать пользователей с помощью 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);

, и я использую bind для аутентификации пользователя

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

Моя проблемав том случае, если пароль имеет символ *, он преобразует его в \ 2a, и аутентификация завершается неудачно.например, если пароль «somepassword *», он меняет его на «somepassword \ 2a» и привязка завершается неудачей.

Поэтому мне было интересно, как я могу очистить пароль, но также иметь возможность аутентификации с помощью bind.

1 Ответ

0 голосов
/ 21 мая 2019

Вы не должны дезинфицировать пароли.RFC 4511 говорит, что текстовые пароли должны передаваться как UTF-8.Нетекстовый пароль нельзя изменять.

Серверы LDAP обрабатывают пароли как строки октетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...