ruby-on-rails - Turbolinks - 拒绝执行内联脚本,因为它违反了以下内容安全政策
问题描述
我正在使用“Turbolinks 5.1.0”。
文件:宝石文件
gem 'turbolinks', '~> 5.1'
文件:应用程序布局头
<%= javascript_include_tag "application", nonce: true %>
文件:config/initializers/content_security_policy.rb
Rails.application.config.content_security_policy_nonce_generator = -> 请求 { SecureRandom.base64(16) }
谷歌浏览器控制台错误
VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
[仅报告] 拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self' https: 'unsafe-inline' 'nonce-UiVx2CiP0HHN9jOOSEG43g=='”。请注意,如果源列表中存在散列值或随机数值,则忽略“不安全内联”。
n.assignNewBody @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
n.replaceBody @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.renderView @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
n.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
e.renderSnapshot @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
e.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
为了解决这个问题,我似乎有两种解决方案,如下所示
1) 使用 data-turbolinks-track: reload
<%= javascript_include_tag "application", 'data-turbolinks-track': :reload, nonce: true %>
或者
2)使用会话存储对turbolink请求重用相同的随机数,这是解决这个问题的正确方法吗?
Rails.application.config.content_security_policy_nonce_generator = -> request do
# use the same csp nonce for turbolinks requests
if request.env["HTTP_TURBOLINKS_REFERRER"].present? && request.session["mykey"].present?
request.session["mykey"]
else
request.session["mykey"] = SecureRandom.base64(16)
end
end
请在这里提出正确的解决方案!
解决方案
推荐阅读
- python - 在 Python 中,有没有办法从其父类调用子类的方法覆盖?
- python - 评估键值列表重叠的更有效方法(熊猫)
- python - 我的命令在我的不和谐服务器中不起作用
- javascript - the_content() 没有正确显示描述
- java - 为什么 Spring Boot Starter Mongodb Reactive 不保存我的实体的列表字段?
- python - Django Rest 没有明确声明
- visual-studio-code - 使用断点步骤调试时显示编辑器
- r - 子集数据集仅保留平均值
- python - 使用 kazoo python 注册服务并用于服务发现
- python - python selenium 没有打开新的实例窗口并且不工作