functions.php
<?php /** * XSS対策:エスケープ処理 * * @param string $s 対象の文字列 * @return string 処理された文字列 */ function h($s) { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); } /** * エスケープ処理をして改行の前に br タグを追加する */ function hbr($s) { return nl2br(htmlspecialchars($s, ENT_QUOTES, 'UTF-8')); } /** * CSRF対策 * @param void * @return string $csrf_token */ function setToken() { // トークンを生成 $csrf_token = bin2hex(random_bytes(32)); $_SESSION['csrf_token'] = $csrf_token; return $csrf_token; }
tokeninput.php
フォームからトークンを送信
<input type="hidden" name="csrf_token" value="<?php echo h(setToken()); ?>">
tokencheck.php
トークンの照会と削除(削除することで二重送信対策になる)
<?php session_start(); if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { echo "不正なリクエストです。"; exit(); } // トークンの削除 unset($_SESSION['csrf_token']); }