Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何禁止匿名ldap登录?_Php_Authentication_Ldap - Fatal编程技术网

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口令在技术上是合法的,它绝对是一种创可贴。你可能认为所有的组织都把王国的钥匙交给了他们的开发者。如果是这样,你就大错特错了。像我这样的人——他们在一家大型官僚机构工作——不得不一直编写这样的变通方案。完成最小的改变可能需要几个月,如果有的话。