Easy CSRF Key

PHPで、おてがる簡単にCSRF対策するやつ。


デモ

Easy CSRF - Demo

(つかいかた)

1. 適当にrequireする。

require 'easy_csrf.php';

2. 適当にsession_start()しておく。

session_start();

3. (HTML) submitの手前に次の一文をいれる

<input type="hidden" name="<?= EasyCSRF::KEY_NAME ?>" value="<?= EasyCSRF::generate() ?>" />

4. データを受け取る箇所で次のようにする

if (! EasyCSRF::check($_POST[EasyCSRF::KEY_NAME])) {
	echo '送信されたデータが、なんかおかしいです';
	die();
}

コード (こぴぺして使おう!)

宿題

これだけでもCSRF対策になるけど、ちょっと不便な時があるよ。
なぜなら、generateを呼び出すたびに、新しいキーになるから。

だからリロードでpostデータを送ったり、
複数タブで操作したりするとNG判定されるよ。

それだと困る場合は、固定キーに改造してみよう!
generateのところを、キーを生成・保持する機能と、保持されたキーを返す機能に分ければいいかな。
それで、ログイン時とかにキーを生成しておくと良いですよ。


5分でできるPHPセキュリティ対策 - ぼくはまちちゃん! by はまちや2