0

PHPを使用して、Apache HTTPサーバー(バージョン2.2)にHTTP基本認証を実装しています。パスワードで保護したい唯一のディレクトリは、私のWebサイトのメインのパブリックWebルートのサブディレクトリです(たとえば、保護されたディレクトリを「/ private」と呼び、そのレルムを「Private」と呼びましょう)。

可能であれば、「プライベート」レルムですでに認証されているユーザー(およびそれらのユーザーのみ)に、Webサイトのホームページ(さらに言えば、他のWebページ)でカスタマイズされたコンテンツを表示してもらいたいと思います。

私が知りたいのは、ドメインのトップレベルのトップレベルでログインプロンプトを強制せずにこれを行うことは可能ですwww.jdclark.orgか(たとえば、「プライベート」レルムの場合は外部の他のURI)?

編集:

上記を実現するために適用することを考えた1つの手法は、次のとおりです。ユーザーが「/ private」ディレクトリのアクセス制御を介して「Private」レルムに認証されると、PHPでセッションCookieを設定できます。次に、このCookieの存在を確認できます(セッションIDまたはある種の一意のランダムな文字列が含まれている可能性があります)が、ITセキュリティの専門家であるとは宣言していませんが、この方法は少し「ハック」と感じます、」と何かが私にこれは安全ではないことを教えてくれます(たとえば、悪意のあるユーザーがそのCookieをHTTPヘッダーで偽装するのは簡単でしょうか?)。アドバイスをいただければ幸いです。

4

1 に答える 1

1

HTTP認証ヘッダーの存在を確認し、これを使用して何を表示するかを決定します。

if (isset($_SERVER['PHP_AUTH_USER'])) {
    $username = $_SERVER['PHP_AUTH_USER'];
    $password = $_SERVER['PHP_AUTH_PW'];
    // validate login credentials
    $private = true; // or false if validation fails
}

if ($private) {
    // load special view
}
else {
   // load normal view
}

他の場所でまだログインしていない場合、これはユーザーにログインを求めるプロンプトを表示しません。

複数の場所でこれを行う場合は、コードを複製するのではなく、ヘッダーをチェックして資格情報を検証する(true成功した場合、失敗した場合に戻る)関数を提供する単一の再利用可能なクラスまたはファイルを用意するのが理にかなっています。 false

于 2013-02-04T11:30:35.160 に答える