0

私が働いている場所では、smtp サーバーがそれを必要とするため、匿名のディレクトリ アクセスを使用しています。詳細はわかりません。私が取り組んでいるプロジェクトでは、Active Directory ログインを使用したいと考えていました。私が遭遇した問題、ldap == true かどうかを確認できません。/常に/true になるためです。また、ログイン全体を行い、javascript を使用せずに 1 つのページにコンテンツを表示しています。

これが私がやったことです:

$adServer = 'ipaddress';
$ldapconn = ldap_connect($adServer)
or $this->msg = "Could not connect to LDAP server.";
//Begin magic to compensate for anonymous directory access while still locking out anonymous users
if($_POST["password"] == null)
{
$password = "invalid";
}
else $password = $_POST["password"];
$ldaprdn = "domain\\" . $_POST["username"];
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $password);

if($ldapbind) {
$loggedin = true;
}
elseif(isset($_POST["password"]) && !$_POST["password"] == null) {
$msg = "Incorrect username or password";
$loggedin = false;
}
else {$loggedin = false;}

基本的に、偽のパスワードをハード コーディングし、ログイン フォームが本物のパスワードを渡すのを待ちます。このシステムは機能しますが、これを行うためのよりクリーン/簡単/高速な方法があるかどうか疑問に思っていました.

4

2 に答える 2

0

この質問は何の関係もありませんldapが、次のようなより一般的な質問です: PHPでフォーム検証を行うにはどうすればよいですか?

if (isset($_POST["password"]) === false) {
    throw new Exception("Missing input");
}
if (is_string($_POST["password"]) === false) {
    throw new Exception("Bad input");
}
// now you now password exists, and it's a string so you can pass it to ldap
于 2013-10-30T17:00:17.107 に答える
0

クライアントが LDAP ディレクトリ サーバーに接続するとき、その接続は認証されていない承認状態になります。LDAP クライアントは、BIND 要求を使用して、サーバーが接続の承認状態を BIND 要求内の情報に関連付けられた状態に変更するように要求できます (単純な BIND 要求では、唯一の情報は DN とパスワードです)。接続の承認状態が正常に変更されると、その接続に対する以降の操作は、次の状態になるまでその承認状態で実行されます。

  • 新しい BIND 要求が接続に到着する
  • 接続は、クライアントまたはサーバーによって終了されます。

これが、「認証」が LDAP でどのように機能するかです。多かれ少なかれ、コード スニペットにカプセル化しましたが、BIND 応答で到着した可能性のある応答コントロールをチェックしていません。

こちらもご覧ください

于 2013-10-31T00:30:02.200 に答える