ruby-on-rails 开发环境中的内容安全策略中断错误页

zpjtge22  于 2023-03-09  发布在  Ruby
关注(0)|答案(1)|浏览(127)

我在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

4dc9hkyq

4dc9hkyq1#

我在turbo.es2017-esm.js的另一行(:348)也有同样的错误。解决方案是从那个特定表单的表单字段中删除我忽略的样式属性,并将其移动到一个适当的css类中。
因为启用turbo-rails后无法显示问题的确切来源。禁用它会有所帮助,因此浏览器CSP错误指向正确的行,而不是turbo.es2017-esm.js。

相关问题