php csrf対策
参考サイト
PHPでクロスサイトリクエストフォージェリ(CSRF)対策するときのメモ - Qiita
<?php //トークンをセッションにセット function setToken(){ $token = sha1(uniqid(mt_rand(), true)); $_SESSION['token'] = $token; } //トークンをセッションから取得 function checkToken(){ //セッションが空か生成したトークンと異なるトークンでPOSTされたときは不正アクセス if(empty($_SESSIOIN['token']) || ($_SESSION['token'] != $_POST['token'])){ echo '不正なPOSTが行われました', PHP_EOL; exit; } } //GETでアクセスされたとき if($_SERVER['REQUEST_METHOD'] != 'POST'){ setToken(); } //POSTでアクセスされたとき else{ checkToken(); }
html
<form method="post" action=""> ... <!--hiddenで生成したワンタイムトークンの文字列をPOST送信--> <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>"> <input type="submit" value="登録"> ... </form>
post時にtokenをポストする必要がある