セッションの値と比較して検証しているのね。理解できました。
<?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('認証に成功しました。'); }