Ruby 如何以编程方式设置内容\安全\策略?

Ruby 如何以编程方式设置内容\安全\策略?,ruby,ruby-on-rails-5,content-security-policy,Ruby,Ruby On Rails 5,Content Security Policy,我正在为Rails 5.2应用程序配置内容安全策略。我需要在我们的CSP中列出一些域的白名单。我希望将域列表放在其他位置,以便在应用程序的其他位置引用它们,然后从该列表以编程方式生成CSP头 看一下,似乎有一些神奇的元编程正在进行,所以我不清楚如何完成我需要做的事情。看起来我需要调用以设置头的函数可能会对它们的调用方式很挑剔。特别是,我不清楚我是否可以将数组传递给它们或安全地多次调用它们,或者它们是否具有某种元编程的魔力,这种魔力只在域作为单个函数参数传递时才起作用 我可以像这样将数组传递给要设

我正在为Rails 5.2应用程序配置内容安全策略。我需要在我们的CSP中列出一些域的白名单。我希望将域列表放在其他位置,以便在应用程序的其他位置引用它们,然后从该列表以编程方式生成CSP头

看一下,似乎有一些神奇的元编程正在进行,所以我不清楚如何完成我需要做的事情。看起来我需要调用以设置头的函数可能会对它们的调用方式很挑剔。特别是,我不清楚我是否可以将数组传递给它们或安全地多次调用它们,或者它们是否具有某种元编程的魔力,这种魔力只在域作为单个函数参数传递时才起作用

我可以像这样将数组传递给要设置的头吗

whitelisted_domains = ['https://example.com', 'self']

Rails.application.configure do
  config.content_security_policy do |csp|
    csp.child_src whitelisted_domains
  end
end
whitelisted_domains = ['https://example.com', 'self']

Rails.application.configure do
  config.content_security_policy do |csp|
    whitelisted_domains.each {|domain| csp.child_src domain}
  end
end
或者我可以像这样多次调用同一个函数吗

whitelisted_domains = ['https://example.com', 'self']

Rails.application.configure do
  config.content_security_policy do |csp|
    csp.child_src whitelisted_domains
  end
end
whitelisted_domains = ['https://example.com', 'self']

Rails.application.configure do
  config.content_security_policy do |csp|
    whitelisted_domains.each {|domain| csp.child_src domain}
  end
end

如果这两种方法都不起作用,那么实现我想做的事情的最佳方法是什么?

从源代码和文档中可以看出,这需要一个数组。从轨道的边导板,张贴以下内容

Rails.application.config.content_security_policy do |policy|
  policy.default_src :self, :https
  ...
end
以及,使用
*源
作为参数;它相信它需要任何数量的争论,这意味着你可以按照以下思路做一些事情:

whitelisted_domains = ['https://example.com', 'self']

Rails.application.configure do
  config.content_security_policy do |csp|
    csp.child_src(*whitelisted_domains)
  end
end

为每个指令定义方法的源代码

(注意:这些都没有在Rails应用程序、外观简单的指南和Rails源代码中测试过)