Rails4 で CSRF 対策を無効にする

Rails4 でCSRF 対策を無効にしたい場合、CSRF 対策を無効にするコントローラーで次のように指定します。

app/controllers/some_controller.rb

スポンサーリンク

これで、対象のコントローラーのアクションで CSRF 対策を無効にできます。

— 環境 —
rails-4.0.1

CSRF 対策を無効にできるかどうかの判断

ただし、DBに対する追加・更新・削除など恒久的なデータ変更を加える可能性のあるアクションでは、CSRF対策は無効にしないほうが良い。CSRF攻撃により意図しないデータ変更が引き起こされる可能性があるためです。

CSRFを防ぐ必要があるのは、Webアプリケーションに対して何らかの恒久的な データ変更を発生させるアクセスとなるページ(登録情報変更、設定変更、退 会処理、注文実行、取り消しなど)である。たとえば、情報を表示するだけの ページには対策が不要、もしくは重要性が低い(後述の「2ページ目」など)。 ショッピングカートへの商品追加などのように、一時的な状態変更を加えるだ けのページに対するCSRF対策の重要性は低めとなる*1。

高木先生の記事で上記のように書いてありました。情報を表示するだけのページ、ショッピングカートなどセッションを使っての一時的な状態変更だけのページであれば、CSRF対策の重要性は低めだそうです。

Rails4 では protect_from_forgery はデフォルトで有効

ちなみに、Rails4 では ApplicationController に以下のように書いてあり、デフォルトで CSRF 対策が有効になっています。たった1行で CSRF 対策がばっちりになる Rails すごい。

app/controllers/application_controller.rb

HTMLソースを確認すると、GETメソッド以外(POST)のリクエストに、authenticity_token という名前の hidden field が自動的に追加されてます。

value の値は正しいリクエストかどうかを検証するための、ランダムな文字列のトークン。

GET 以外のメソッドで、セッション中のトークンとパラメータのトークン(params[:authenticity_token])を比較して検証し、もし一致しない場合は session をクリアする。

試してみましたところ、トークンが一致しない場合は、InvalidAuthenticityToken という例外が発生しました。

以上です。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!