Ruby-on-Rails の特定のルートに対して CSP を異なるように構成することは可能ですか?

概要

使用するルートに応じて、Ruby-on-Rails アプリで異なる CSP ポリシーを取得することは可能ですか?特定のルートには config.csp = SecureHeaders::OPT_OUT が必要ですが、他のルートには正確な CSP が必要です。

解決策

正確にはルートごとではありませんが、Rails 7.0 以降を使用している場合は、コントローラー レベルでグローバル設定をオーバーライドできます。例:

class PostsController < ApplicationController
  content_security_policy do |policy|
    policy.base_uri "https://www.example.com"
  end
end

または完全に無効にします。

class PostsController < ApplicationController
  content_security_policy false, only: :index

  def index; end
end

Rails 6.0以降でも可能のようですが、それ以前のバージョンについては知りません。

多くの例を含む Rails ドキュメント: https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://guides.rubyonrails.org/security.html#content-security-policy-header

メソッドの API ドキュメント: https://api.rubyonrails.org/classes/ActionController/ContentSecurityPolicy/ClassMethods.html#method-i-content_security_policy