1

LDAPサーバーを使用してユーザーを認証します。サーバーはリモートでアクセスされるため、Webサーバーがオンラインになり、LDAPサーバーがメンテナンスのためにダウンする可能性がかなり高くなります。

現在、ldap_bindが失敗した場合、それはユーザー認証の問題(ユーザー名/パスが間違っている)であると想定し、ユーザーにメッセージを表示します。ただし、LDAPサーバーへの接続が失敗している場合(必ずしも資格情報の問題ではない場合)、何百人ものユーザーから、問題がないのにパスワードが機能していないと言われることになります。

どうすればこれから回復できますか?ldap_bindが呼び出されるまで接続が延期されるため、ldap_connectはすべての場合に成功するようです。ldap_bindからの戻り値は単純なブール値であり、PHPによって表示される警告メッセージは有益ですが、それは私のコードをあまり助けません。

4

2 に答える 2

3

を使用しldap_errno()ます。

http://php.net/manual/en/function.ldap-errno.php

考えられるエラーコードのリスト: http ://www.php.net/manual/en/function.ldap-errno.php#20665

于 2012-04-10T21:07:18.773 に答える
0

要求/応答フレームワーク

LDAPインタラクションは、要求と応答で構成されます。応答には常に結果コードが含まれます。リクエストがバインドの場合、ゼロ以外の結果コードはエラーが発生したことを示します。たとえば、結果コードの10進数49は、提供された資格情報が正しくないことを示します(セキュリティ上の理由から、この結果コードはエントリ時に返される場合があります)。攻撃者を誤解させるために存在しません)。アプリケーションコーダーは、などの既知の正しいツールを使用して認証することにより、サーバーへの接続が成功し、バインド識別名が正しい資格情報を持っていることを確認する必要がありますldapsearch。たとえば、次のことを試してください。

ldapsearch -h hostname -p port \
   -D distinguished-name-here -w <password> -b '' -s base '(&)' 

上記の検索は、接続を確立し、接続の許可状態を、指定された資格情報を使用して指定された認証IDに変更してから、ルートDSEから属性を取得します。この検索が成功した場合、アプリケーションコーダーは資格情報が正しいことを保証できます。

ネットワークタイムアウト

タイムアウトはLDAPプロトコルの一部ではないため、アプリケーションコーダーは常にネットワークタイムアウトの概念をサポートするAPIを使用する必要があります。検索には時間制限がありますが( RFC4511を参照)、プロトコルにはネットワークタイムアウトはありません。LDAP APIがネットワークタイムアウトをサポートしていない場合、そのAPIは重要なLDAPクライアントの動作と見なされるべきではありません。

も参照してください

于 2012-04-11T09:05:30.683 に答える