0

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

4

1 回答 1

1

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

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

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

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

于 2012-04-12T00:29:38.363 回答