Javascript Rails中样式src的nonce错误地添加到脚本src中

Javascript Rails中样式src的nonce错误地添加到脚本src中,javascript,ruby-on-rails,content-security-policy,Javascript,Ruby On Rails,Content Security Policy,我在Rails应用程序中有一个内联样式标记,我正试图用nonce将其列入白名单 错误:Content-Security-Policy:页面的设置观察到内联(“style-src”)加载了资源。正在发送CSP报告。 使用gem时,助手将注入样式: 为什么它指向错误的指令,我如何才能使它指向样式src?是的,这将干扰您的CSP(或者更准确地说,您的CSP将干扰您的标记) 使用散列时,需要计算每个标记的散列,并将CSP头中的散列作为脚本src输出。如果在ERB文件中放置一个literal标记,Rail

我在Rails应用程序中有一个内联样式标记,我正试图用nonce将其列入白名单

错误:
Content-Security-Policy:页面的设置观察到内联(“style-src”)加载了资源。正在发送CSP报告。

使用gem时,助手将注入样式:


为什么它指向错误的指令,我如何才能使它指向
样式src

是的,这将干扰您的CSP(或者更准确地说,您的CSP将干扰您的
标记)

使用散列时,需要计算每个
标记的散列,并将CSP头中的散列作为
脚本src
输出。如果在ERB文件中放置一个literal
标记,Rails无法知道该标记,并且它不会计算哈希值或将其添加到头中


Rails(据我所知)不支持哈希作为源。您可以使用gem,它提供了一个
hashed\u javascript\u标记
方法来代替

您可以尝试在script\u src之前添加default\u src吗
config.default\u src:self
作为一个纯粹实用的注释,为什么要内联使用?为什么不在外部JS文件中编写一个单击处理程序,并使用类而不是ID?您只需要一个,大致是
$('.start chat')。单击(e=>{e.preventDefault();$(event.currentTarget).attr('href').modal('show')}
,然后通过href将按钮及其目标链接在一起。我真的不知道怎么做。比如,页面上有一个
购买列表
。每个
购买
都会呈现一条
发送消息
部分,其中包含一个表单,用于在
当前用户
和参与此操作的另一方之间创建聊天
购买
。为了使每个表单都独一无二,我觉得我必须为每次购买创建一个新表单。啊哈,在那些文档中,哈希最适合用于清除静态的内联内容。为什么说“每个”脚本标记,你的意思是将它们全部放入一个散列中吗?@calyxofheld不,它们都放入各自的散列中。每个脚本标记都必须进行散列,并且其散列必须添加到标题中。此外,内容不必是静态的,只要你能为生成的内容计算正确的散列。这对于静态内容来说比较容易,但是
hash_javascript_标记
适用于任何类型的内容。
<%= invisible_captcha nonce: true %>
Rails.application.config.content_security_policy do |config|
 config.style_src  :self, :https    
end

Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
Rails.application.config.content_security_policy_nonce_directives = %w(style-src script-src)