今やってる学校の実験の内容は、ウェブアプリケーションの作成。PHPとMySQLが出てくる。
PHPとか高校時代にさわったきりなので、結構いろいろ忘れてる。
高校時代から何の進歩もないのも嫌なので、Cookieとかセッションも扱えるように勉強を始めた。
今回のウェブアプリケーションの実験は、セキュリティの勉強も兼ねているので、そのあたりも一緒に勉強しないとならない。
いろんなサイトを巡って情報を集めて、とりあえず簡単なログインシステムっぽいのを作ってみた。
- func.php – 関数定義
<?php /** * secure_session_start() * セッションを開始する * @param void * @return void */ function secure_session_start() { // セッションIDを推測されにくいユニークなものに設定 /* mt_srand(microtime()*10000); session_id(md5(uniqid(mt_rand(),1)));*/ // セッション名を設定 session_name('kakeibo'); // セッションの持続時間を30分に設定 session_set_cookie_params(1800); // セッションを開始する session_start(); // Session Fixation攻撃対策 if(!isset($_SESSION['initiated'])){ session_regenerate_id(true); $_SESSION['initiated'] = true; } } /** * session_end * セッションを破棄する * @param void * @return void */ function session_end() { // セッション変数を初期化 $_SESSION = array(); // Cookieを削除 if(isset($_COOKIE[session_name()])){ setcookie(session_name(), '', time()-42000, '/'); } // セッションファイルを削除 session_destroy(); } ?>
- login.php – ログインページ
<?php include('config.php'); include('func.php'); secure_session_start(); if(isset($_POST['pass'])){ if($_POST['pass'] == USER_PASS){ $_SESSION['logged_in'] = true; session_regenerate_id(true); header("Location: ./ok.php"); } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Login</title> </head> <body> <h3>ログイン</h3> <form action="login.php" method="post"> <input type="password" name="pass" value="" size="20" maxlength="20"> <input type="submit" value="OK"> </form> ※<?php echo $_SERVER["SERVER_NAME"]; ?>からのCookieを受けつけるように設定してください。 </body> </html>
- ok.php – ログインした後にしか見られない専用ページ
<?php include('func.php'); secure_session_start(); if($_GET['mode'] == "logout"){ session_end(); } if(!isset($_SESSION['logged_in'])){ header("Location: ./login.php"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>OK</title> </head> <body> <h2>ログインOK!</h2> <form action="ok.php" method="get"> <input type="hidden" name="mode" value="logout"> <input type="submit" value="Logout"> </form> </body> </html>
実際に設置したログインページはここ。専用ページはここ。パスワードは’pass’.
ログインしていない状態で専用ページを表示しようとすると、自動的にログインページにリダイレクトされる。
一度ログインすると、30分以上アクセスしないか、Cookieを削除しない限り、ブラウザを閉じたり、キャッシュを消したりしても問題なく表示される。
こうやってうまくいくと、新しいことを勉強するのも楽しい。次はGDライブラリの使い方とか勉強してみようか…
ちなみにパスワードは「pass」