PHPプログラムに関する各種メモ書き

codeigniterでCSRF対策(CSRFプロテクション)機能を使う

● codeigniterでCSRFプロテクション機能を使う

codeigniterでCSRFプロテクション機能の概要は以下の通りです

  • POSTメソッドでフォームを送信する時にCSRFプロテクション機能が有効になる
  • コンフィグファイルのcsrf_protection を TRUE にするだけでアプリケーション全体で有効
  • コントローラ/メソッド ごとの on/off は出来ない(システムのソースを書き換えると可能)

● codeigniterでCSRFプロテクション機能を有効にする

codeigniter/application/config/config.php の以下の行を変更する

$config['csrf_protection'] = TRUE;

● codeigniterでCSRFプロテクション機能を使ってみる

コントローラ test/indextest/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などで書き換えて送信するとエラーとなることが確認できます。

関連エントリー

No.1088
10/21 11:44

edit

CodeIgniter