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は省略できます。