Rails CSRF対策について


CSRFとは

Cross Site Request Forgeryのことで、
Webアプリに知らない間にリクエストが送られる不正攻撃のことです

例えばインスタで知らない間に自分の投稿を消されていたりしたら
CSRFです。

CSRF対策の設定

application_controller.rbに下のような記述をすると、

Can't verify CSRF token authenticity

というエラーが出てきます。このエラーが出たらCSRFのエラーで
Railsがちゃんとしたリクエストがいっているかどうかを CSRF Tokenというもので
確認するのですがそれが確認できないというエラーです。

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

end

解決策

application_controller.rbに下のような記述をします。

application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: null_session

end

これは公開する時にはあまり役に立たないです。CSRF対策をOFFにしてしまうからです。

他にも

class ApplicationController < ActionController::Base
   skip_before_action :verify_authenticity_token

end

このような方法もあるみたいです。 CSRF 対策を放棄する時に使います。

最後に

上のやり方はあくまでエラーを解決するための方法です。
アプリを公開したりする場合は、CSRF Tokenの設定が必要になります。
下の参考資料に載っているので調べてみてください。

⚫︎参考資料
https://midorimici.com/posts/rails-api-csrf