首先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 身份验证?如果是这样,这是您需要做的:
- 使用特权绑定,通过在搜索筛选器中使用提供的用户名提取用户的 DN(如果使用 Active Directory,则为 UPN)。
- 如果失败,则用户名不正确,并让用户知道用户名/密码不正确。
- 如果成功,请获取 DN 并使用该 DN 和提供的密码再次绑定。
- 现在,这应该要么成功,要么正确失败。
换句话说,不要只接受传入的用户名并尝试使用它进行绑定。
*如果您提供有关您正在尝试做什么以及您正在使用的LDAP服务器的更多详细信息,我可以提供更详细的答案。