WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
PHP
システム開発
[PHP]csrf対策
システム開発担当のTFです。
やり方
- csrfトークンを作成し、sessionに保存する
- 作成したcsrfトークンをフォームにセットする
- フォームの飛び先で、sessionとフォームにセットしたcsrfトークンの一致するかを判定をする
サンプル
<?php
// sessionの開始
session_start();
// csrfトークンの作成
$csrf_token = bin2hex(random_bytes(32));
// sessionへの保存
$_SESSION['csrf_token'] = $csrf_token;
?>
<!-- フォーム外省略 -->
<form method="POST" action="./form_send.php">
<!-- フォームにcsrfトークンのセット -->
<input type="hidden" name="csrf_token" value="<?= $csrf_token ?>" >
<!-- 必要なinput等 -->
</form>
<!-- フォーム外省略 -->
<?php
// sessionの開始
session_start();
// csrfトークンの一致判定
if( !isset($_POST['csrf_token']) || ( $_POST['csrf_token'] != $_SESSION['csrf_token'] ) ){
// csrfトークン エラー処理
exit;
}
// csrfトークン OK
// 何等かの処理
// sessionのcsrfの削除
unset( $_SESSION['csrf_token'] );
?>