Open4
CSRF対策について(RailsのAPIモードで使うには)
CSRFとは
- 悪意の有るWebページを開いた時に、任意のリクエストを対象サーバに送る攻撃方法
- リクエストには、ユーザーのブラウザに保存された認証情報が含まれるため、CookieやBASIC認証などの情報が利用される
現在、ほとんどのモダンブラウザでは、Cookieのデフォルトの挙動がsamesite=lax
なので他サイトからのPOSTではCookieが送信されない。
そのため、Cookieを利用したPOSTによるCSRFは起きなくなっている。
ただし、以下のケースでは引き続きCSRF対策が必要
- 利用者のブラウザバージョンが古い場合
- 利用者がIEやSafari、Firefoxを使っている場合
- Cookieを使った認証を行っていない場合
csrf-tokenをRailsのAPIモードで使うには
-
application_controller.rb
にinclude ActionController::RequestForgeryProtection
が必要 -
form_authenticity_token
でtokenを生成してクライアントに渡す(渡し方は工夫が必要) - クライアントはtokenをリクエストヘッダーかparamsでサーバーに送信する
Rails6.1からcookieのsamesiteがデフォルトでlaxになっていた。
これでほとんどのブラウザのCSRFはカバーできていそう。