【问题标题】:Ldap and Bind are not working properlyLdap 和 Bind 无法正常工作
【发布时间】:2014-07-30 14:11:38
【问题描述】:

我用 PHP 做了一个小程序来检查用户名和密码是否正确。每当我输入正确的密码时,我都会收到“LDAP 绑定成功...”,但是一旦我在 Active Directory 中更改密码并立即输入新密码或旧密码,我就会收到“LDAP 绑定成功...”消息。当我输入旧密码时,我无法理解为什么我收到“LDAP 绑定成功...”消息,因为它应该给我一个错误。以下是我的代码。我在这里缺少什么?我怎样才能修改我的代码,以便即使在更改密码后我也会得到正确的回复。请注意,我是 PHP 编程新手。

<html>
<body>
    <?php
$ldaprdn  = $_POST['name'];     // ldap rdn or dn
$ldappass = $_POST['password']; // associated password

// connect to ldap servers
$ldapconn = ldap_connect("ldap://server")
    or die("Could not connect to LDAP server.");


    // binding to ldap server
$ldapbind = ldap_bind($ldapconn,$ldaprdn,$ldappass);

   if($ldapbind){
        echo "LDAP bind successful...";
    } else {
       $errno = ldap_errno( $ldapconn );
       echo $errno;
    }



?>
</body>
</html>

【问题讨论】:

    标签: php


    【解决方案1】:

    听起来您在目录中启用了anonymous binding

    我认为尝试使用名称和密码进行绑定不会退回到匿名绑定,因此可能还有其他问题。

    我注意到您从 $_POST (未清理的 BTW,tisk tisk)获取绑定名称/通行证,因此您的表单实际上可能没有为发布数据设置(导致空白值),或者您的字段名称不正确。我知道如果$ldaprdn == "" 那么它将匿名绑定,因此请检查该值以确保它有用。

    我看到您正在使用 Active Directory,所以您可能会发现 this adldap library 更有用

    【讨论】:

    • 感谢您的回复...我输入错误密码时出现错误。只有当我输入旧密码或新密码时,我才会收到“LDAP 绑定成功...”消息。我已经使用匿名绑定检查了我的代码,并且工作正常。
    • 例如,如果您输入正确的用户名和密码,例如(用户:stackoverflow 和密码:1234),那么您将得到“LDAP 绑定成功”。现在在收到成功消息后,如果您输入错误的密码(用户:stackoverflow 和密码:1235),您将收到错误消息。到这里我的代码工作正常。如果您要更改 stackoverflow 用户 ID 的密码,例如新密码现在是(新密码:0987)在 Active Directory 中,如果您再次运行程序并输入(用户:stackoverflow 和密码:1234),您将获得“LDAP绑定成功”
    • @user1577864 我仍然会验证$ldaprdn$ldappass 的实际值您是否在用户或密码中使用了任何非ASCII 字符?
    • 我只是回显 $ldaprdn 和 $ldappass。我得到了正确的用户名和密码。我在我的测试密码中使用了 $,%,但我也尝试了简单的密码以及大写、小写字母和数字的组合。
    • @user1577864 使用adLDAP 时得到相同的结果吗?
    猜你喜欢
    • 2014-08-28
    • 2013-01-25
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2017-02-17
    • 2021-08-02
    • 2013-08-01
    相关资源
    最近更新 更多