我们的应用程序在Rails 5.2上,它使用没有资产管道的webpacker来提供资产。我想知道在脚本标记上设置nonce属性的最佳方法是什么。
在content_security_policy.rb
,有一个用于UJS的content_security_policy_nonce_generator
,我想知道我是否仍然可以使用它而没有任何副作用。以下工作和我只是想知道做这样的事情的最佳做法是什么。
#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>
发现它https://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html结果是有一个红宝石视图助手
<%= javascript_tag nonce: true do -%>
alert('All is good')
<% end -%>