Oct 16

逆引きrhaco56: CSRF対策をする

書く量の少ないネタなので書くのを忘れてました。

RhacoはCSRF対策のフィルタを用意しています。フィルタとはFlowクラスで使用できる機能拡張のようなものです。
まずarboのgeneric.filter.HtmlCsrfFilter.php
をダウンロードして、importできるようにします。※
例としてlibrary/arbo/generic/filter/HtmlCsrfFilter.phpに入れるとします。

CSRF対策のフィルタは下のように導入します
=##Flowを使う場合

Rhaco::import("arbo.generic.filter.HtmlCsrfFilter");
$flow = new Flow("arbo.generic.filter.HtmlCsrfFilter");
....
※2

=##Urlsを使う場合
$parser = Urls::parser(
  array("^$"=>
    array("method"=>"read","args"=>array(new Product())
    )
  ),"arbo.generic.filter.HtmlCsrfFilter",new DbUtil(Product::connection()));
$parser->write();


入力フォームのテンプレートでformタグのmethodをPOSTにします。

これだけでrhacoはCSRF対策をしてくれます。
CSRFで送られてきたPOSTの場合Exception(IllegalStateException)が付きますのでそれを判定すればエラー処理できます。

※rhaco1.4系列には元々含まれています場所はgeneric/filterです

※2 Rhaco::importは省略できます。

| comment(0)