トリック|スクリプト
PHP によるユーザー認証
スクリプトごとにパスワード保護を実装したい場合は、header() 関数を $PHP_AUTH_USER および $PHP_AUTH_PW グローバル変数と組み合わせて使用し、基本的な認証スキームを作成できます。典型的なサーバーベースの認証要求/応答ラウンドは次のようになります。
1. ユーザーが Web サーバーにファイルを要求します。ファイルが保護領域内にある場合、サーバーは応答ファイルのヘッダーに 401 (不正なユーザー) 文字列を追加して応答します。
2. ブラウザが応答を確認すると、ユーザー名/パスワードのダイアログ ボックスが表示されます。
3. ユーザーはダイアログ ボックスにユーザー名とパスワードを入力し、[確認] ボタンをクリックしてこの情報をサーバーに送信します。
4. ユーザー名とパスワードが有効な場合、現在認証されているユーザーが保護領域内にいる限り、保護されたファイルがユーザーに表示されます。上記の認証プロセスはすべて有効です。
単純な PHP スクリプトは、適切な HTTP ヘッダーを送信することで HTTP 認証要求/応答システムをエミュレートし、クライアントの画面にユーザー名/パスワードのダイアログを自動的に表示できます。 PHP は、ユーザー入力ダイアログ情報を $PHP_AUTH_USER 変数と $PHP_AUTH_PW 変数に保存します。これらの変数を使用すると、ユーザー名/パスワードのチェックを満たさないリストをテキスト ファイル、データベース、または指定した場所に保存できます。 注: 3 つのグローバル変数 $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))) {
/* いいえ値: ヘッダーを送信してダイアログ ボックスを表示します */
header('WWW-Authenticate: Basic realm="My Private Stuff"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit ;
} else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){
/* 値にはいくつかの値が含まれているため、それらが正しいかどうかを確認します */
if (($ PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {
/* 入力されたユーザー名が間違っているか、入力されたパスワードが間違っている場合は、ダイアログ ボックスを表示させるヘッダーを送信します。 */
('WWW-Authenticate: Basic realm="My Private Stuff"');
header('HTTP/1.0 401 Unauthorized');
echo '認可が必要です。';
exit;
} else if (($ PHP_AUTH_USER == "有効な名前") || ($PHP_AUTH_PW == "良いパスワード")) {
ファイルベースの保護を使用している場合、これはセキュリティブランケットではないことに注意してください。ディレクトリは必ず保護してください。これはほとんどの人にとって明らかですが、ポップアップ ダイアログ ボックスと特定のディレクトリの保護を脳が結び付けている場合は、このプロセスを認識するために懸命に努力する必要があります。