如何覆盖特定操作的Content-Security-Policy

时间:2015-09-18 07:13:02

标签: content-security-policy hanami

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

如何针对特定操作/操作使用不同的Content-Security-Policy

1 个答案:

答案 0 :(得分:4)

Content-Security-Policy是一个HTTP标头,因此它与操作有关,而与视图无关。

您可以像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

你可以把它包括在需要的地方。