带有空白用户名和密码的ldap_bind()问题

时间:2012-04-11 19:57:56

标签: php

首先启用LDAP_bind匿名。我遇到的问题如下:

此代码正常运行没有问题:

<?php
$ldaprdn  = 'uname';   
$ldappass = 'password';  

$ldapconn = ldap_connect("ldap.example.com")
    or die("Could not connect to LDAP server.");

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

    if ($ldapbind) {
        echo "LDAP bind successful...";
    } else {
        echo "LDAP bind failed...";
    }
}
?>

无论什么

,下面的这个都会返回“成功”
   <?php
    $ldaprdn  = '';   
    $ldappass = '';  

    $ldapconn = ldap_connect("ldap.example.com")
        or die("Could not connect to LDAP server.");

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

        if ($ldapbind) {
            echo "LDAP bind successful...";
        } else {
            echo "LDAP bind failed...";
        }
    }
    ?>

请注意,此版本中的凭据保留为空。我不喜欢这样的事实:如果凭证留空,那么这件事就会让你进去。我做错了什么?或者只是这个ldap_bind()是复杂的。我认为如果我用三个参数调用该函数,它不应该默认为匿名。

我可以通过将用户名和密码设置为虚拟值来解决这个问题,以防用户名和密码留空,但这根本不是好习惯。 请帮忙......

出处:http://php.net/manual/en/function.ldap-bind.php

1 个答案:

答案 0 :(得分:1)

您是否正在为网络应用进行LDAP身份验证?如果是这样,这就是你需要做的事情:

  1. 使用特权绑定,使用搜索过滤器中提供的用户名获取用户的DN(如果使用Active Directory,则获取UPN)。*
  2. 如果失败,则用户名不正确,并让用户知道用户名/密码不正确。
  3. 如果成功,请使用该DN并使用该DN和提供的密码再次绑定。
  4. 现在,这应该成功或失败。
  5. 换句话说,不要只使用传入的用户名并尝试使用它进行绑定。

    *如果您提供有关您要执行的操作以及您正在使用的LDAP服务器的更多详细信息,我可以提供更详细的答案。