Rails 5.2:设置CSP随机数的最佳实践

时间:2019-02-04 22:52:56

标签: ruby-on-rails ruby-on-rails-5 content-security-policy

我们的应用程序是在Rails 5.2上,它使用webpacker服务资产,而没有资产管道。我想知道在脚本标签上设置随机数属性的最佳方法是什么。

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中,如果我想在脚本标签上使用随机数,则必须从请求中获取它。根据这里: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 :(得分:1)

找到了https://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html 事实证明,有一个用于此目的的红宝石视图助手

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