Rails 5.2: лучшая практика для установки одноразового номера CSP - PullRequest
0 голосов
/ 05 февраля 2019

Наше приложение работает на Rails 5.2 и обслуживает ресурсы с помощью веб-упаковщика без конвейера активов.Мне было интересно, как лучше установить атрибуты nonce в теге script.

В content_security_policy.rb есть content_security_policy_nonce_generator для UJS, мне было интересно, смогу ли я использовать это без каких-либо побочных эффектов.Следующая работа, и мне просто интересно, как лучше всего делать что-то подобное.

#initializers/content_security_policy.rb

# If you are using UJS then enable automatic nonce generation
Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) 

В application.html.erb, если я хочу добавить nonce в тег сценария, я должен получить его из запроса.По данным здесь: https://api.rubyonrails.org/classes/ActionDispatch/ContentSecurityPolicy/Request.html#method-i-content_security_policy_nonce

#app/views/layouts/application.html.erb

<!DOCTYPE html>
<html dir="ltr">
  <head>
    <title>FruitsMarket</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_pack_tag 'application' %>
    <%= javascript_pack_tag 'polyfills' %>
    <%= javascript_pack_tag 'application' %>
    <script type="text/javascript" nonce=<%= request.content_security_policy_nonce %>>
      alert('hi');
    </script>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

1 Ответ

0 голосов
/ 13 февраля 2019

Нашел его https://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html Оказывается, для этого есть помощник вида ruby ​​

<%= javascript_tag nonce: true do -%>
  alert('All is good')
<% end -%>
...