PHP LDAP绑定成功,有时密码不正确
我目前正在集成LDAP身份验证。我可以连接到LDAP AD服务器,并以匿名方式查询数据,这很好。我现在正在尝试验证用户,当我输入用户名和随机密码时,它成功失败,当我输入真实密码时,它成功通过,但我能够输入大部分正确的密码,它仍然通过 e、 g:PHP LDAP绑定成功,有时密码不正确,php,authentication,active-directory,ldap,Php,Authentication,Active Directory,Ldap,我目前正在集成LDAP身份验证。我可以连接到LDAP AD服务器,并以匿名方式查询数据,这很好。我现在正在尝试验证用户,当我输入用户名和随机密码时,它成功失败,当我输入真实密码时,它成功通过,但我能够输入大部分正确的密码,它仍然通过 e、 g: Username: user1 Password: RandomPassword1 (works) Username: user1 Password: Random (fails) Username: user1 Password: RandomPa
Username: user1
Password: RandomPassword1
(works)
Username: user1
Password: Random
(fails)
Username: user1
Password: RandomPasswo
(works???)
所以现在我很好奇,如果Active Directory可能没有检查整个密码,可能它不能,或者它使用的哈希算法为RandomPassword1生成与RandomPasswo相同的哈希代码
我想我的问题是^,但也有办法确保它正确认证吗?
我没有用其他密码测试过这个,因为我没有访问其他帐户的权限来测试它,但是当密码是RandomPassword1时它肯定会工作(这恰好是我的密码,是的-我现在已经更改了它)
编辑:我的LDAP绑定代码:
function validateLoginDetails($username, $password) {
$ldap_connection = ldap_connect("server", 389);
if($ldap_connection === FALSE) {
echo "Unable to connect.";
} else {
ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3) or die("Could not set version.");
ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);
}
$r = @ldap_bind(@$ldap_connection, "uid=".$username.",ou=People,o=Foo", $password);
if(!$r) {
return false;
} else {
return true;
}
}
(请注意,使用相同的连接,我可以列出所有用户及其信息,它确实拒绝随机混合的密码,但正如我所说,它接受半完整的密码。这可能是AD或LDAP中的一个选项?)
(我也意识到,即使我更改了密码,我的新密码也不起作用,但旧密码RandomPassword1仍然起作用,但我想这可能是因为AD需要一段时间才能更新或做些什么?我不确定。)我知道已经很久了,但我只是遇到了同样的“问题”,回答了你的问题,并找出原因(至少在我的情况下)。所以我想我会为那些感兴趣的人描述我是如何解决它的(尽管它可能不再是你特别感兴趣的) 在我的例子中,我发现这是因为我试图用“相似”密码(正确的密码减去或加上几个字符)验证的用户使用Unix Crypt方法对密码进行了加密(它在一台仅用于开发目的的机器中,所以没什么大不了的) 它可能只考虑了一个固定的短密码长度来生成散列,因此密码的最后几个字符并不重要
然后,我使用一种更强大的加密方法(如SHA-512 Crypt)设置用户密码,它只识别准确的密码,正如预期的那样。您能给我们一个如何进行身份验证的代码示例吗?这不应该发生,因此我很好奇你是如何实现登录的,看看那里发生了什么……我现在已经添加了这个函数。也许是因为我压制了警告?正常情况下,新密码应该立即生效。您的广告中似乎还有其他内容无法正常工作抱歉,应该指定更好的-我更改了密码,并登录到Windows。这很好,只是LDAP绑定仍然可以使用旧密码/半密码工作。我上面的身份验证功能正常吗?代码似乎正常,尽管我的做法不同。我将删除ldap_绑定上的错误抑制,以查看是否存在来自服务器的任何消息。但是由于AD和您绑定到的服务器之间缺少同步,因此似乎发生了一些不同的事情。