Как мне программно установить content_security_policy? - PullRequest
0 голосов
/ 26 октября 2018

Я настраиваю Политику безопасности контента для нашего приложения Rails 5.2.Мне нужно внести в белый список некоторые домены в нашем CSP.Я хотел бы разместить список доменов в другом месте, чтобы я мог ссылаться на них в других местах приложения, а затем программно генерировать заголовки CSP из этого списка.

Просмотр исходного кода для КонтентаМеханизмы настройки политики безопасности в Rails 5 , похоже, что происходит какое-то волшебное метапрограммирование, поэтому мне не ясно, как выполнить то, что мне нужно сделать.Похоже, что функции, которые мне нужно вызывать для установки заголовков , могут быть разборчивыми в том, как именно они хотят вызываться.В частности, мне неясно, могу ли я передавать им массивы или безопасно вызывать их несколько раз, или они выполняют магию метапрограммирования, которая работает, только если домены передаются в качестве отдельных аргументов функции.

Могу ли япередать массив в заголовок, который я хочу установить, как это?

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

Если ни один из этихбудет работать, как лучше всего выполнить то, что я хочу сделать?

1 Ответ

0 голосов
/ 26 октября 2018

Из того, что я могу сказать из исходного кода и документации, он берет массив.От бортовых направляющих на рельсах, отправляя следующие

Rails.application.config.content_security_policy do |policy|
  policy.default_src :self, :https
  ...
end

и исходный код , используя *sources в качестве параметра;он считает, что требуется любое количество аргументов, что означает, что вы могли бы сделать что-то вроде;

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

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

https://blog.sqreen.io/integrating-content-security-policy-into-your-rails-applications-4f883eed8f45/

https://edgeguides.rubyonrails.org/security.html#content-security-policy

Исходный код define_method для каждой директивы https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/content_security_policy.rb#L151

(примечание: ничего из этого не было протестировано в приложении Rails, простых руководствах и исходном коде Rails)

...