我在Rails应用程序中启用了内容安全策略。当我在开发环境中本地运行它时,由于浏览器的内容安全策略阻止了内联JavaScript和CSS,因此Rails错误页面被破坏。我在Google Chrome中从turbo.es2017-esm.js收到以下错误:
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self' localhost:3000 'nonce-vJgPXpdJcQ 60 SidkuK 6V/Q=='”。启用内联执行需要“unsafe-inline”关键字、哈希(“sha 256-N8 P082 RH 9 sZuH 82 Ho 7454 s +117 pCE 2 iWh 5 PWBDp/T60 =')或随机数(”nonce-...“)。
当我在Google Chrome中检查页面时,我看到script
元素的nonce
属性为空:
<script type="text/javascript" data-template="error_page" nonce="">
这可能就是javascript被屏蔽的原因,因为script标签没有正确的nonce。有办法解决这个问题吗?
config/initializers/content_security_policy.rb
Rails.application.configure do
# The policies are set in config/environments/[development/test/production].rb
# Generate random nonce that will be used in <script> and <style> elements
config.content_security_policy_nonce_generator = -> (request) { SecureRandom.base64(16) }
# Add the nonce to the Content-Security-Policy header
config.content_security_policy_nonce_directives = %w(script-src style-src)
end
config/environments/development.rb
config.content_security_policy do |policy|
policy.default_src :self
policy.img_src :self, 'data:'
policy.script_src :self
policy.style_src :self
policy.connect_src :self
end
版本
导轨:7.0.4.2涡轮导轨:1.3.3
Javascript:@热连线/涡轮导轨:7.2.5 @热接线/涡轮增压:7.2.5 @热接线/刺激:3.2.1
1条答案
按热度按时间4dc9hkyq1#
我在turbo.es2017-esm.js的另一行(:348)也有同样的错误。解决方案是从那个特定表单的表单字段中删除我忽略的样式属性,并将其移动到一个适当的css类中。
因为启用turbo-rails后无法显示问题的确切来源。禁用它会有所帮助,因此浏览器CSP错误指向正确的行,而不是turbo.es2017-esm.js。