ベーシック認証とは、事前に作成したユーザーとパスワードを持つ人にのみページを公開したい時
簡単に使用できるのが、ベーシック認証です。
ここでは、phpによる ベーシック認証 を紹介します。
ベーシック認証 の仕組みについては、次のページを参照してください。[ベーシック認証]
Apacheによる ベーシック認証 は、次のページを参照してください。[Apacheによるベーシック認証 ]
この機能は、Apacheモジュールとして実行した時のみ 有効で、CGI版では利用できません。
仕組みとしては、Apache等がクライアントとのやり取りを行うのと同様のことを php で実現することになります。
<?php function AuthenticateUser($user,$pwd){ //ファイルやDBを使ってユーザーをチェックします。 } if(!isset($_SERVER["PHP_AUTH_USER"])) { header("WWW-Authenticate: Basic realm=\"Please Enter Your Password\""); header("HTTP/1.0 401 Unauthorized"); //キャンセル時の表示 echo "Authorization Required"; exit; } else { if(AuthenticateUser($_SERVER["PHP_AUTH_USER"],$_SERVER["PHP_AUTH_PW"])){ //認証成功後の処理 } else { //認証エラーの処理 } } ?>
それでは、ソースを見てみます。
$_SERVER["PHP_AUTH_USER"] に値がセットされているかどうかでリクエストに Authorization ヘッダが
指定されているかどうか判断を置き換えています。
$_SERVER["PHP_AUTH_USER"] に値がセットされていない場合、レスポンスとして WWW-Authenticate ヘッダを送信します。
Authorization ヘッダにユーザー名とパスワードが設定されている場合、それらが正しいかをチェックします。
正しければ、ページを表示します。
Realm は、大きく分けて二つの機能を提供します。
一つ目は、クライアントがパスワードダイアログボックスの 一部としてユーザにこの情報をよく提示する、
というものです。 二つ目には、クライアントが与えられた認証領域に対してどのパスワードを
送信すれば良いのかを決定するために使われる機能です。
それでは、当ページの主旨らしくMySQLを使って認証をしてみようと思います。
とはいえ、DBに登録されたユーザーとパスワードをチェックするだけのことです。
DBのテーブルを次のように定義します。
create table ms_user( user varchar(20) not null, pwd varchar(16) not null, PRIMARY KEY (user) );
ソースは次のようになります。
function AuthenticateUser($user,$pwd){ global $db; $bRet = false; $sql = "SELECT pwd FROM user WHERE user = '" . $user . "'"; $dyn = $db->Query($sql); if(!$dyn){ return $bRet; } $rec = $db->FetchRow($dyn); //md5関数やcrypt関数を使うのもいいですね。 //でも、もとが平文ではなんとも・・・ if($rec['pwd'] == $pwd){ $bRet = true; } else{ $bRet = false; } $db->FreeQuery($dyn); return $bRet; } $db = new B3DB($dbhost,$dbuser,$dbpwd,$dbname); if(!isset($_SERVER["PHP_AUTH_USER"])) { header("WWW-Authenticate: Basic realm=\"Please Enter Your Password\""); header("HTTP/1.0 401 Unauthorized"); //キャンセル時の表示 echo "Authorization Required"; exit; } else { if(AuthenticateUser($_SERVER["PHP_AUTH_USER"],$_SERVER["PHP_AUTH_PW"])){ //認証成功後の処理 } else { //認証エラーの処理 } }
Copyright 1997-2010 BBB All rights reserved.