管理システムを作ろうとするとどうしてもアクセス制限をする必要があります。ApacheのソースIP制限が最も有効ですが、ユーザ登録をした人に対してログインさせる場合はそうもいきません。また、パスワードは万一流出しても暗号化しておく事も重要です。

今回のソースは、Crypt関数で暗号化されたパスワードで認証することとします。これで、UNIX系のサーバであれば「htpasswd」コマンドで作成したファイルがそのまま利用できます。

Crypt関数認証を行う場合、次のようにパスワードが合っているか確かめます。

if(ファイルに保存された暗号化パスワード == crypt(入力されたパスワード,
   ファイルに保存された暗号化パスワード))


認証が正しいかどうか確認するだけのソースはこんなソースになります。

<html>
<head>
<title>PHP認証</title>
</head>
<?php
$reload  = $_SERVER["SCRIPT_NAME"];
$act = $_POST['act'];
$id = $_POST['myid'];
$pw = $_POST['mypw'];
?>
<body>
<form method="post" post="<?php echo $reload ?>">
<input type="hidden" name="act" value="login">
<table><tr>
<td>UserID</td><td><input type="text" name="myid" size="30"></td>
</tr><tr>
<td>Passwd</td><td><input type="password" name="mypw" size="30"></td>
</tr><tr>
<td colspan="2"><input type="submit" vlaue="LOGIN"></td>
<tr></table>
<?php
//
if($act == "login") {
$pfile = "./.htpasswd";
//
$pdata = file($pfile);
//
$flag = 1;
foreach ($pdata as $line) {
  $line = rtrim($line);
  list($i,$p) = explode(":", $line);
  if($i == $id) {
     if($p != crypt($pw,$p)) { $flag = 2; }
     else { $flag = 0; brake; }
  }
}
//
$errmessage[1] = $id."は登録されていません";
$errmessage[2] = "パスワードが誤っています";
//
if($flag) { echo $errmessage[$flag]; }
else { echo "<h3>OK</h3>\n"; }
}
?>
</body>
</html>

PHPマスター関連記事