Php 如何禁止匿名ldap登录?
我有以下资料:Php 如何禁止匿名ldap登录?,php,authentication,ldap,Php,Authentication,Ldap,我有以下资料: class LDAPConnection { private $ldapServers = array( "ldap://serv1", "ldap://serv2" ); private $ldapUsername = "DOMAIN\\%s"; function login($username, $password) { $user = sprintf($this->ldapUsername, $
class LDAPConnection {
private $ldapServers = array(
"ldap://serv1", "ldap://serv2"
);
private $ldapUsername = "DOMAIN\\%s";
function login($username, $password) {
$user = sprintf($this->ldapUsername, $username);
// Make sure password is not empty (http://stackoverflow.com/a/172042/561731)
if(!empty($password)) {
foreach($this->ldapServers as $server) {
try {
$ldap = \ldap_connect($server);
\ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
if($bind = \ldap_bind($ldap, $user, $password)) {
// log them in
return true;
}
}
catch(\ErrorException $e) {
// do nothing
}
}
}
return false;
}
}
如您所见,我首先确保$password
不为空,然后尝试ldap连接,因为如果我不这样做,则ldap假定我要进行匿名连接,并返回true
我如何防止这种情况?是我唯一的选择,就像我在上面做的那样,我必须检查以确保密码不是空的?或者有更好的方法吗?禁用匿名登录不应该在应用层完成。这应该在实际的LDAP服务器上完成
在您的应用层禁止匿名登录看起来像一个创可贴,因为如果服务器本身启用匿名登录,任何人都可以使用任何LDAP客户端登录到LDAP服务器。p> 检查
$password
是否为空有什么问题?似乎是相当基本的验证。只要抛出一个异常。@ceejayoz如果有一些ldap.*
函数为您执行此操作,那么它似乎是一个额外的东西,可能不需要。我怀疑当它是一个简单的if($password)
函数时,是否有ldap.*
函数来执行此操作。。。特别是绑定W/O口令在技术上是合法的,它绝对是一种创可贴。你可能认为所有的组织都把王国的钥匙交给了他们的开发者。如果是这样,你就大错特错了。像我这样的人——他们在一家大型官僚机构工作——不得不一直编写这样的变通方案。完成最小的改变可能需要几个月,如果有的话。