【PHP】セキュリティ強化 CSRF対策

2020年12月28日

問い合わせフォームの確認画面に遷移するタイミングでセッションに合言葉(トークン)を保存する。

submitのタイミングでセッションのトークンと一致するかを確認することでCSRFを防ぐことができる。

トークンの生成処理

PHP5の場合

$token = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));

PHP7の場合

$token = bin2hex(random_bytes(32));

実装

確認画面遷移時

//$token = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); // php5のとき
$token = bin2hex(random_bytes(32));                           // php7以降
$_SESSION['token']  = $token;
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">

submit時

if( $_POST['token'] != $_SESSION['token'] ){
//(トークンが一致しない場合のエラー処理)

}else{
//(トークンが一致したときの処理)

}

PHP

Posted by Next-k