人生ずっと勉強

人生ずっと勉強ですね。 https://twitter.com/KiyotakaGoto

rails 3 での csrf 対策まとめ

rails3 だと、csrf トークンを投げずに post リクエストなどを送っても、

WARNING: Can’t verify CSRF token authenticity

が出ると同時にセッションがリセットされるが、POST リクエスト自体は通る。

csrf トークン自体は、form_for などのヘルパーを使ったら自動で埋め込まれる。
自分で form タグを書いた場合は

<%= hidden_field_tag :authenticity_token, form_authenticity_token %>

とテンプレートに書いて csrf トークンを埋め込む。

csrf トークンの検証に失敗した場合にエラーとしたい場合は、

class ApplicationController < ActionController
  
  def handle_unverified_request
    raise ActionController::InvalidAuthenticityToken
  end

end

と handle_unverified_request を上書きして、raise ActionController::InvalidAuthenticityToken などする。