sinatraでCSRF対策

sinatraCSRF対策をやろうとして、適当な良いライブラリとかないかな〜って探してたら、sinatraでは1.3.0以降、rack-protectionという各種攻撃対策ライブラリを使っててそれでCSRF対策もできるらしい。
http://blog.udzura.jp/2011/10/04/sinatra-1-3-0-and-padrino-0-10-3-released-1/

英語版のチュートリアルにも書いてあった。2012/10時点で日本語版にはまだなし。
Sinatra: README


詳しい使い方について日本語版の情報が見つからなかったので、githubのページとか見ながら調べた。CSRF対策についてだけだけど。

使い方

rack-protectionのバージョンは1.1.0
基本的には次のコードを追加するだけ。

use Rack::Protection

これだけで各種攻撃対策が有効になる。具体的にどんなものがあるかはこちらが詳しい。

CSRF対策が具体的にどんなふうに行われるかというと、POST等のメソッドについて
リファラが確認できない
リファラが外部
のいずれかの場合に、トークンのチェックを行ってCSRFを検知し403を返す。

もし外部ホスト等からPOSTする場合は、フォームにトークンを埋め込む必要がある。こちらを参照。


今回の私の場合は外部からのPOSTアクセスはなかったので、useした以外はコードに変更なしで楽ちん。


特定の攻撃対策だけ有効にしたいとかいうのも可能なよう
GitHub - sinatra/rack-protection: NOTE: This project has been merged upstream to sinatra/sinatra