動かざることバグの如し

近づきたいよ 君の理想に

RailsでCookieのSameSite属性を指定する方法

CookieのSameSite属性とは

CookieのSameSite属性は、Webサイトのセキュリティを向上させるために導入された機能です。

SameSite属性を指定することで、Cookieがどのような場合に送信されるかを制御することができます。

SameSite属性には、以下の3つの値があります。

  • Strict: SameSite属性が指定された場合、Cookieは同一オリジンからのリクエストにのみ送信されます。
  • Lax: SameSite属性が指定された場合、Cookieは同一オリジンからのリクエストに加えて、外部ドメインからのGETリクエストにも送信されます。
  • None: SameSite属性が指定されなかった場合、Cookieはすべてのリクエストに送信されます。

RailsでSameSite属性を指定する方法

Railsでは、CookieのSameSite属性を指定するために、cookiesメソッドを使用します。以下は、SameSite属性をStrictに指定する例です。

cookies[:user_id] = {
  value: current_user.id,
  same_site: :strict
}

同様に、Laxに指定する場合は:lax、Noneに指定する場合は:noneを指定します。

cookies[:user_id] = {
  value: current_user.id,
  same_site: :lax
}
cookies[:user_id] = {
  value: current_user.id,
  same_site: :none
}

以上が、Railsで個別でCookieのSameSite属性を指定する方法です。セキュリティを向上させるために、適切なSameSite属性を指定するようにしましょう。

一括で設定したい場合は以下

config.action_dispatch.cookies_same_site_protection = :strict

これにより、すべてのCookieにSameSite属性が設定され、Strictモードが有効になります。

Rails 5.1以前を使用している場合は、Rackのmiddlewareを使用してSameSite属性を設定する必要があります。config/application.rbファイルに以下のコードを追加します。

config.middleware.insert_before(ActionDispatch::Cookies, Rack::SameSite, :none)

これにより、すべてのCookieにSameSite属性が設定され、Noneモードが有効になります。

参考リンク