我正在尝试使用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”,并且绑定将失败。
所以我想知道如何清理密码但还能通过绑定进行身份验证。
答案 0 :(得分:0)
您不应该清理密码。 RFC 4511指出,文本密码应作为UTF-8传输。非文本密码不得更改。
LDAP服务器将密码视为八位字节字符串。