sinatraでCSRF対策
sinatraでCSRF対策をやろうとして、適当な良いライブラリとかないかな〜って探してたら、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