【发布时间】:2019-10-06 22:14:31
【问题描述】:
我正在尝试使用 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 进行身份验证。
【问题讨论】: