codeigniterでCSRFプロテクション機能の概要は以下の通りです
codeigniter/application/config/config.php の以下の行を変更する
$config['csrf_protection'] = TRUE;
コントローラ test/index → test/confirm 画面遷移でCSRFprotectionが有効なことを確認します
codeigniter/application/cotrollers/Test.php に以下のメソッドを追加します
public function index() {
$data = array();
$data['csrf_token_name'] = $this->security->get_csrf_token_name();
$data['csrf_token_hash'] = $this->security->get_csrf_hash();
$html = $this->twig->render('form.html', $data);
echo $html;
}
public function confirm(){
echo 'ok';
}
twig テンプレートファイル form.html は以下のように作成しておきます
<html>
<body>
<form action="/test/confirm" method="post">
<input type="hidden" name="{{csrf_token_name}}" value="{{csrf_token_hash}}">
<input type="submit">
</form>
</body>
</html>
この状態でコントローラー test/index にアクセスすると formの hidden
<input type="hidden" name="csrf_test_name" value="7c195574347b1a4888d7f3bf4bd6331d">
がセットされているはずです。これがCSRF対策のトークンとなります。
ここの値をchromeなどで書き換えて送信するとエラーとなることが確認できます。