ユーザ名 hoge パスワード geho,またはユーザ名・パスワードともに guest で入れます。
このページの最初の部分は次のようになっています:
<?php
session_set_cookie_params(0, '/~okumura/php/');
session_start();
$users = array('hoge' => 'geho', 'guest' => 'guest');
if (isset($_POST['username']) && isset($_POST['password'])) {
if (isset($users[$_POST['username']]) && $users[$_POST['username']] == $_POST['password']) {
$_SESSION['username'] = $_POST['username'];
} elseif (isset($_SESSION['username'])) {
unset($_SESSION['username']);
}
}
?>
ここで $users = array('hoge' => 'geho', 'guest' => 'guest');
は $users['hoge'] = 'geho'; $users['guest'] = 'guest';
と同じことです。
上のフォームの部分は次のように書いてあります:
<?php if (!isset($_SESSION['username'])) { ?>
<form action="login.php" method="post">
<p>Username: <input name="username" size="20"></p>
<p>Password: <input type="password" name="password" size="20"></p>
<p><input type="submit" value="ログイン"></p>
</form>
<p>ユーザ名 hoge パスワード geho,またはユーザ名・パスワードともに guest で入れます。</p>
<?php } else { ?>
<p>あなたは <?php echo htmlspecialchars($_SESSION['username']) ?> としてログインしています。</p>
<form action="login.php" method="post">
<p>
<input type="hidden" name="username" value="dummy">
<input type="hidden" name="password" value="dummy">
<input type="submit" value="ログアウト">
</p>
</form>
<?php } ?>
生パスワードをPHPソース(または別のテキストファイルまたはデータベース)に格納するのではなく,そのハッシュ値を格納しておくほうが安全です。例えばパスワードが geho の場合,md5('geho') の値 '76e7975454ce7833a24ba266f5b75503' を格納しておき,パスワードを入力したらその md5 値がこれと等しいか調べます。md5 値から元のパスワードは容易にわかりません。y = md5(x) から x の値を求めるのは現時点では不可能ですが,md5(x1) = md5(x2) を満たす x1,x2 を見つける方法はすでに存在しますので,用途によっては md5() はすでに十分安全ではありません。一般には,今後は md5() よりもっと良いハッシュ関数 sha1() をお薦めします。
というのはもう古く,今は sha1() でも十分とは考えられていません。PHPで例えば hoge の sha256 を求めるには hash('sha256', 'hoge') とします。この値は ecb666d778725ec97307044d642bf4d160aabb76f56c0069c71ea25b1e926825 のようになります。
さらには,ソルト(salt)という仕組みと組み合わせるのが推奨です。ソルトについては授業で説明します。
ソルトを使う際に必要になるかもしれないこと:
$x = "hoge" . "|" . "geho"; ← $x には hoge|geho が入る$a = explode("|", $x); ← $a[0] には hoge が,$a[1] には geho が入るLast modified: