はじめに
先日参加した勉強会にて、
「 application_controller.rb
に記述されているprotect_from_forgery with: :exception
が csrfを対策 している」(裏を返すと、ここを削除するとcsrf攻撃を受けるリスクが生まれる)
という説明を受けたのだが、
そもそも protect_from_forgery with: :exception
なるコードを見た事が無い気がしたので調べてみた。
比較
以下、Rails versionが5.1.7と5.2.3でrails new
した直後のapplication_controller.rb
の比較です。
v5.1.7
$ rails -v
Rails 5.1.7
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
end
↑protect_from_forgery with: :exception
がある!
v5.2.3
$ rails -v
Rails 5.2.3
class ApplicationController < ActionController::Base
end
↑protect_from_forgery with: :exception
が無い!
結論
確かに、rails5.1台までは**protect_from_forgery with: :exception
**がapplication_controller.rbで記述されていることが確認できる。
どうやらRails version5.2 以降ではActionController::Base内でprotectしているようです。
https://stackoverflow.com/questions/50905654/rails-5-2-actioncontrollerinvalidauthenticitytoken
間違いなどありましたらご指摘ください!