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