如何为特定操作覆盖内容安全策略

How to override Content-Security-Policy for a specific action

我显然可以更改 views/application.rb 中的 Content-Security-Policy。我还可以为开发模式添加不同的 Content-Security-Policy

如何为特定的 action/actions 使用不同的 Content-Security-Policy

Content-Security-Policy 是 HTTP header,因此它与操作相关,与视图无关。

您可以像这样在 apps/web/application.rb 中设置全局值:

security.content_security_policy '...'

您可以在 apps/web/application.rb 中根据环境设置全局值:

configure :development do
  security.content_security_policy '...'
end

您可以为给定操作设置不同的值:

module Web::Controllers::Home
  include Web::Action

  def call(params)
    headers.merge!('Content-Security-Policy' => '...')
  end
end

如果您有许多操作需要相同的异常,您可以执行以下操作:

# apps/web/controllers/csp_rule.rb
module Web::Controllers::CSPRule
  def self.included(action)
    action.class_eval do
      before :set_content_security_policy
    end
  end

  private

  def set_content_security_policy
    headers.merge!('Content-Security-Policy' => '...')
  end
end

您可以在需要的地方添加它。