<手順>
①トークン発行処理、チェック処理(関数化)
②セッションの開始(※1)
③WEB表示時→トークンを発行(※2)
フォーム送信時→トークンチェックの処理
④フォームにhiddenタグを仕込ませ、セッショントークンを格納
①
トークンを発行処理
<?php function setToken() { $token = sha1(uniqid(mt_rand(), true)); $_SESSION['sstoken'] = $token; }
トークンチェック処理
<?php function checkToken() { if (empty($_SESSION['sstoken']) || ($_SESSION['sstoken'] != $_POST['token'])) { echo '<html><head><meta charset="utf-8"></head><body>不正なアクセスです。</body></html>'; exit; } }
②
<?php session_start(); $pdo = connectDb();
③
<?php if ($_SERVER['REQUEST_METHOD'] != 'POST') { setToken(); } else { checkToken(); }
④
<?php <input type="hidden" name="token" value="<?php echo h($_SESSION['sstoken']); ?>" />
(※1)必ずデータベース接続前
(※2)セッションにトークンを仕込ませる。