セッションの値と比較して検証しているのね。理解できました。
<?php
session_start();
$toke_byte = openssl_random_pseudo_bytes(16);
$csrf_token = bin2hex($toke_byte);
$_SESSION['csrf_token'] = $csrf_token;
?>
<!DOCTYPE html>
<html>
<body>
<form action="contact.php" method="POST">
<div>
<label for="name">お名前:</label>
<input type="text" id="name" name="name" />
</div>
<div>
<label for="email">メールアドレス:</label>
<input type="email" id="email" name="email" />
</div>
<div>
<label for="message">お問い合わせ本文</label>
<textarea id="message" name="message"></textarea>
</div>
<input type="hidden" name="csrf_token" value="<?php echo $csrf_token; ?>" />
<button type="submit">送信</button>
</form>
</body>
</html>
session_start();
// ワンタイムトークンの一致を確認
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
// トークンが一致しなかった場合
die('お問い合わせの送信に失敗しました');
} else {
echo('認証に成功しました。');
}
