クロスサイトリクエストフォージェリ対策 (CSRF)

まず基本的に、GET と POST を適切に使い分ける必要がある。

GET を使うべき場面

  • そのやりとりが基本的に問い合わせ (question) である場合 (クエリ、読み出し操作、検索のような安全な操作)

POST を使うべき場面

  • そのやりとりが基本的に命令 (order) である場合
  • そのやりとりによってリソースの状態が変わり、そのことがユーザーにわかる場合 (サービスへの申し込みなど)
  • そのやりとりによって生じる結果に対してユーザーが責任を持つ場合

偽造リクエストを防止するために、必須セキュリティトークン (required security token) を導入する。アプリケーションコントローラはデフォルトで次のコードを含む。

protect_from_forgery with: :exception

偽造リクエストに対してクッキーを消去する必要がある場合は、次のコードを使う。

rescue_from ActionController::InvalidAuthenticityToken do |exception|
  # ユーザーのログイン情報 (cookie) を削除する
  sign_out_user
end

参考:

クロスサイトリクエストフォージェリ (CSRF) | Rails ガイド [公式]

Rails の CSRF 周りのコードリーディング | freedom-man

Rails の CSRF 保護を詳しく調べてみた 翻訳 | TechRacho

A Deep Dive into CSRF Protection in Rails | Ruby Inside

Securing Rails Applications | Ruby on Rails Guides [Official]

per_form_csrf_tokens

参考:

フォームごとに異なる CSRF トークンを受け取れるようになった 翻訳 | TechRacho

InvalidAuthenticityToken エラー

参考:

Rails で CSRF トークン検証エラーが出ることがある | 覚え書き

Rails の CSRF 対策の仕組みについて | odaillyjp blog

Rails の InvalidAuthenticityToken 対応 – Qiita

Ajax リクエスト時に CSRF トークンを送る

jquery-ujs もしくは rails-ujs を使うと、AJAX リクエストの際に自動的に CSRF トークンが送信される。

参考:

Ajax で POST すると「Can’t verify CSRF token authenticity.」が発生する – Qiita

今さら jquery-rails が csrf トークンをいい感じにしてくれていたことを知った | パパエンジニアのアウトプット帳

rails-ujs に見る、jQuery からの移行法 – Qiita

Rails5 の勉強会をした話と rails-ujs で remote: true なフォームを JS からサブミットさせようとしたらうまくいかなかった話 | Rista Tech Blog

jquery-ujs.js (rails.js) 便利だよって話 – GitHub Gist

Vue.js と Rails の最適な融合を考える | メドピア開発者ブログ

Rails + React axios で通信 ~CSRF トークンの設定~ | 開発メモメモブログ

CSRF トークンの取得 – Webpacker 3 ではじめる Rails エンジニアのためのモダンフロントエンド入門 〜Sprockets を使わない Rails プロジェクト試案〜 | blog.tai2.net

CSRF の対応について、rails 使いが知っておくべきこと | おもしろ web サービス開発日記

Rails で CSRF を無効にせずに Ajax から REST な API を叩く | KazumaLab.

Rails での CSRF 対策避け | DesignAssembler

Rails での Ajax – Qiita

外部から POST できない? Rails の CSRF 対策をまとめてみた – Qiita

Sending POST requests in Rails 5.1 without jQuery | Actualize

How to get jQuery to work with Rail’s Authenticity Token (protect_from_forgery) – GitHub Gist

Set the CSRF token for Rails when doing Ajax requests – GitHub Gist

Can’t verify CSRF token authenticity when making a POST request – Stack Overflow

Nignx でリバースプロキシする

参考:

Rails の POST で CSRF Token が Verify できないときに確認したいこと – Qiita

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です