0

私には(それほど珍しいことではないと思います)シナリオがあります:

私の PHP アプリは、LDAP サーバーにクエリを実行して認証を処理します。LDAP サーバーは認証されたアクセスのみを受け入れるため、最初の ldap_bind() 呼び出しは実際には認証メカニズムとして使用され、ログインしているユーザーの基本情報を取得します。

ここまでは順調ですね。しかし、LDAP サービスを使用して他のクエリ (ログインしているユーザーや他のユーザーの追加情報など) を実行したい場合は、LDAP 認証を再度行う必要があります。

ユーザーのパスワードが漏洩する可能性があるため、セッションに保存したくありませんが、LDAP サーバーの資格情報を提供するために、要求ごとにユーザーを認証させることはできません。

そこで、次の解決策を考えました。

  1. LDAP 接続ハンドルをセッションに保存して、毎回資格情報を提供する必要がないようにします。ハンドルはリソースであり、セッション ストレージ用にシリアル化できないため、これは機能しません。
  2. パスワードをセッションに保存しますが、暗号化します。暗号化シードは、セッション ID のハッシュなどの揮発性変数から派生させることができるため、変数に格納されず、漏洩することはありません。
  3. <Your idea here>

何かご意見は?

ありがとう

gm

4

2 に答える 2

1

私の2セント...最初のユースケースは、ユーザーが初めて接続したときにすべてをプルダウンすることを避けることができると思います。パスワードを除いたすべてをセッションに保存します。2 番目のケース: そのデータにアクセスするには、ユーザー X として認証する必要がありますか? 読み取りアクセス権を持つユーザーを作成し、それらの資格情報 (アプリ ユーザー) を使用してこれらの種類のクエリを実行することはできません。または、そのユーザー情報を AD に保存しないでください。認証に使用しますが、ユーザー データを DB (マスター) に保持するか、AD から DB (スレーブ) に同期します。

于 2013-03-14T19:54:30.517 に答える
0

パスワードの保存に関しては、これは機能しています(Yiiフレームワークを使用していますが、バニラPHPに簡単に適応できます):

public function getUserPW(){
    if(empty(Yii::app()->user->sneak)) return false;

    $seed=sha1(Yii::app()->session->sessionID);
    $iv=substr(md5(Yii::app()->session->sessionID),0,16);

    return openssl_decrypt(Yii::app()->user->sneak,self::CRYPT_ALGO,$seed,false,$iv);
}

public function setUserPW($pw){
    $seed=sha1(Yii::app()->session->sessionID);
    $iv=substr(md5(Yii::app()->session->sessionID),0,16);

    Yii::app()->user->setState('sneak',
        openssl_encrypt($pw,self::CRYPT_ALGO,$seed,false,$iv)
    );
}
于 2013-03-14T20:53:34.430 に答える