CSRF (Cross-Site Request Forgery) の保護が有効になる条件

概要については次を参照。

http://rubist.blog77.fc2.com/blog-entry-117.html

actionpack-2.0.2/lib/action_controller/request_forgery_protection.rb

def verified_request?
  !protect_against_forgery? ||
  request.method == :get ||
  !verifiable_request_format? ||
  form_authenticity_token == params[request_forgery_protection_token]
end

つまり、verified_requestと判断されるには、条件の上からどれかを満たせばよい訳です。

  • ApplicationControllerにprotect_against_forgeryを設定していない
  • リクエストメソッドがget
  • リクエストのフォーマットがverify可能でない
  • リクエストのトークンが期待通りの値となっている

ここで、「リクエストのフォーマットがverify可能」とは、リクエストの要求フォーマットがhtmlかjsの場合です(少なくとも2.0.2では)。