-2

私は次のものを持っています:

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

どうすればそれを防ぐことができますか? 上記のように私の唯一のオプションであり、パスワードが空でないことを確認する必要がありますか? それとももっと良い方法がありますか?

4

1 に答える 1

1

アプリケーション層で匿名ログインを無効にしないでください。これは、実際の LDAP サーバー自体で行う必要があります。

サーバー自体で匿名ログインが有効になっている場合、誰でもいつでも任意の LDAP クライアントを使用して LDAP サーバーにログインできるため、アプリケーション層で匿名ログインを禁止することは、応急処置のように思えます。

于 2013-10-17T03:41:07.403 に答える