ユーザ名 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: