用户名和密码为空的 ldap_bind() 出现问题


Issue with ldap_bind() with blank user name and password

首先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

您是否正在为 Web 应用程序执行 LDAP 身份验证?如果是这样,这是您需要做的:

  1. 使用特权绑定,通过在搜索筛选器中使用提供的用户名提取用户的 DN(如果使用 Active Directory,则为 UPN)。
  2. 如果失败,则用户名不正确,并让用户知道用户名/密码不正确。
  3. 如果成功,请获取 DN 并使用该 DN 和提供的密码再次绑定。
  4. 现在,这应该要么成功,要么正确失败。

换句话说,不要只接受传入的用户名并尝试使用它进行绑定。

*如果您提供有关您正在尝试做什么以及您正在使用的LDAP服务器的更多详细信息,我可以提供更详细的答案。