PHP による HTTP 認証のフックは、Apache モジュールとして実行した時のみ 有効です。Apache モジュール PHP スクリプトにおいて、 Header() 関数を使用して "Authentication Required" メッセージをクライアントブラウザに送ることが可能です。 これにより、クライアントブラウザにユーザー名とパスワードを入力する ウインドウがポップアップ表示されます。 一度、ユーザーがユーザー名とパスワードを入力すると、 PHP スクリプトを含むその URL は、次回以降、 $PHP_AUTH_USER、$PHP_AUTH_PW、$PHP_AUTH_TYPE にそれぞれユーザー名、 パスワード、認証型を入力してコールされます。 現在、"Basic" 認証のみがサポートされています。
ページ上でクライアント認証を強制するスクリプトの例を 以下に示します。
Example 2-1. HTTP 認証の例 <?php
if(!$PHP_AUTH_USER) {
Header("WWW-authenticate: basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
echo "ユーザーがキャンセルボタンを押した場合に送られるテキスト\n"
exit;
} else {
echo "こんにちは $PHP_AUTH_USER.<P>";
echo "あなたは、パスワードとして $PHP_AUTH_PW を入力しました。<P>";
}
?> |
単に $PHP_AUTH_USER、$PHP_AUTH_PW を出力するのではなく、 ユーザー名とパスワードの有効性をチェックしたいと思うかもしれません。 その場合、クエリーをデータベースに送るか、ある dbm ファイル中の ユーザーを調べるといったことをすることになるでしょう。
バグのある Internet Explorer ブラウザには注意してください。 このブラウザは、ヘッダの順序に関してとてもうるさいようです。 今のところ、HTTP/1.0 401 ヘッダの前に WWW-authenticate ヘッダを送るのが 効果があるようです。
誰かが従来の外部機構による認証を行ってきたページのパスワードを暴く ようなスクリプトを書くことを防ぐために、特定のページに関して 外部認証が可能である場合、PHP_AUTH 変数はセットされません。
しかし、上記の機能も、認証を要求されない URL を管理する人が 同じサーバーにある認証を要する URL からパスワードを 盗むことを防ぐわけではありません。