スクリプトごとにパスワード保護を実装したい場合は、header() 関数と $PHP_AUTH_USER および $PHP_AUTH_PW グローバル変数を組み合わせて、基本的な認証メカニズムを作成できます。通常のサーバーベースの認証要求/応答プロセスは次のとおりです。
1. ユーザーが Web サーバーにファイルを要求します。ファイルが保護領域内にある場合、サーバーは応答データのヘッダーに 401 (不正ユーザー) 文字列を追加して応答します。
2. 応答を確認した後、ブラウザーにユーザー名/パスワードのダイアログ ボックスが表示されます。
3. ユーザーはダイアログ ボックスにユーザー名とパスワードを入力し、[OK] をクリックしてこの情報を認証のためにサーバーに送信します。
4. ユーザー名とパスワードが有効な場合、保護されたファイルがユーザーに表示されます。この確認は、認証されたユーザーが保護エリア内にいる限り有効です。
単純な PHP スクリプトは、適切な HTTP ヘッダーを送信して、クライアント画面にユーザー名/パスワードのダイアログを自動的に表示することにより、HTTP 認証の要求/応答システムをシミュレートできます。 PHP は、ユーザー入力ダイアログ情報を $PHP_AUTH_USER 変数と $PHP_AUTH_PW 変数に保存します。これらの変数を使用すると、非準拠のユーザー名/パスワード チェックのリストをテキスト ファイル、データベース、または任意の場所に保存できます。
注: $PHP_AUTH_USER、$PHP_AUTH_PW、および $PHP_AUTH_TYPE グローバル変数は、PHP がモジュールとしてインストールされている場合にのみ有効です。 CGI バージョンの PHP を使用している場合は、htaccess ベースの認証またはデータベース ベースの認証の使用に制限され、ユーザーが HTML フォームを介してユーザー名とパスワードを入力し、PHP が有効性チェックを完了できるようになります。
この例は、ユーザー名とパスワードが保存されている場所に関係なく、理論的には同一である 2 つのハードウェア エンコードされた値の検証チェックを示しています。
/* 変数 $PHP_AUTH_USER と $PHP_AUTH_PW*/
if ((!isset($PHP_AUTH_USER)) || ( !isset( $PHP_AUTH_PW))) {
/* Null 値: データ ヘッダーを送信して表示テキスト ボックスを生成します*/
header('WWW-Authenticate: Basic realm="Myプライベート スタッフ"' );
header('HTTP/1.0 401 Unauthorized');
echo '認証が必要です。';
exit;
} else if ( (isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){
/* 変数値が存在するので、正しいかどうかを確認します*/
if (( $PHP_AUTH_USER != "validname ") || ($PHP_AUTH_PW != "goodpassword")) {
/* ユーザー名が間違って入力された場合、またはパスワードが間違って入力された場合、テキストを生成するデータ ヘッダーボックスが送信されます */
header ('WWW-Authenticate: Basic realm="My Private Stuff"');
header('HTTP/1.0 401 Unauthorized');
echo '認証が必要です。';
exit;
} else if (($PHP_AUTH_USER == "validname") || ($PHP_AUTH_PW == "goodpassword")) {
/* ユーザー名とパスワードの両方が正しい、成功メッセージを出力*/
echo "
あなたは許可されています!
";}
}
?>
ファイルベースの保護を使用している場合、この方法ではディレクトリに包括的なセキュリティが提供されないことに注意してください。 。これはほとんどの人にとって明らかかもしれませんが、ダイアログ ボックスのポップアップと特定のディレクトリの保護を脳が結び付けている場合は、さらに詳しく考える必要があります。 。
Julie Meloni は、i2i Interactive のテクニカル ディレクターであり、Linux およびオープン ソース コミュニティの強力な推進者です。彼女は PHP やその他のテクノロジに関する多数の書籍を執筆しており、CNET Builder.com に長年貢献している専門家です。