PHP LDAP绑定有时成功使用错误的密码

时间:2014-09-18 01:18:44

标签: php authentication active-directory ldap

我目前正在整合LDAP身份验证。我能够连接到我的LDAP AD服务器,并匿名查询数据,这很好。我现在正在尝试对用户进行身份验证,当我输入用户名和随机密码时,它成功失败,当我输入真实密码时,它成功通过,但我能够进入我的MOST正确的密码,它仍然通过。

例如:

Username: user1
Password: RandomPassword1
(works)

Username: user1
Password: Random
(fails)

Username: user1
Password: RandomPasswo
(works???)

所以现在我很好奇,如果Active Directory可能没有检查整个密码,也许它不能,或者它使用的哈希算法为RandomPassword1生成与RandomPasswo相同的哈希码?

我想我的问题是^,但是还有办法确保它正确验证吗? 我还没有使用其他密码对此进行测试,因为我无法访问其他帐户进行测试,但是当密码是RandomPassword1(这恰好是我的密码,是的 - 我是#39;现在改变它了)

编辑:我的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可能需要一段时间来更新或者其他什么?我不确定。)

1 个答案:

答案 0 :(得分:0)

我知道这已经很长时间了,但我遇到了同样的“问题”,遇到了问题,并找出了原因(至少在我的情况下)。所以我想我会描述我是如何为那些感兴趣的人解决它的(尽管它可能不再是你特别感兴趣的了)。

在我的情况下,我发现这是因为我尝试使用“类似”密码(正确的密码减去或加上几个字符)进行身份验证的用户使用Unix Crypt方法加密了密码(它在一台仅用于开发目的的机器,所以没什么大不了的。)

它可能只考虑了一个固定的短密码长度来生成哈希,因此密码的几个字符尝试无关紧要。

然后我使用更强大的加密方法(如SHA-512 Crypt)设置用户密码,它只能按预期识别出正确的密码。