javascript - Rails 中 style-src 的随机数被错误添加到 script-src

标签 javascript ruby-on-rails content-security-policy

我在 Rails 应用程序中有一个内联样式标记,我正在尝试使用随机数将其列入白名单。

错误:Content Security Policy: The page’s settings observed the loading of a resource at inline (“style-src”). A CSP report is being sent.

使用invisible_captcha时,样式由助手注入(inject) gem :

<%= invisible_captcha nonce: true %>

比较 View 和 header 显示随机数被添加到两者中,但它被添加到 script-src而不是style-src .

查看:<style media="screen" nonce="5Cq/QyoJ5Co+LdarO1uvrg==">

标题:Content-Security-Policy-Report-Only script-src 'self' https: 'nonce-5Cq/QyoJ5Co+LdarO1uvrg=='; style-src 'self' https:;

这是我的content_security_policy.rb:

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)

为什么它会转到错误的指令,我怎样才能使它转到 style-src

最佳答案

是的,这会干扰您的 CSP(或者更准确地说,您的 CSP 会干扰您的 <script> 标记)。

使用哈希时,您需要计算每个的哈希 <script>标记,并将 CSP header 中的哈希值输出为 script-src 。如果您放置文字 <script>如果您的 ERB 文件中存在一个标记,Rails 无法知道该标记,并且它不会计算哈希值或将其添加到您的 header 中。

Rails(据我所知)不支持哈希作为源。您可以使用 secure-headers gem,它提供了 hashed_javascript_tag使用方法代替 <script> .

关于javascript - Rails 中 style-src 的随机数被错误添加到 script-src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63125907/

相关文章:

javascript - 为什么knockout-secure-binding会遇到这个语法错误

content-security-policy - 内容安全策略——我可以明确地阻止一个域,这样我就不会收到已知资源的错误吗

javascript - 在 Canvas 中随机生成对象,没有重复或重叠

javascript - 具有多种颜色的按钮文本

ruby-on-rails - Rails装置vs种子

ruby-on-rails - Stripe 市场实现

ruby-on-rails - 基于 Rails 中的用户代理设置内容处置(针对 iOS 错误的解决方法)

javascript - 脚本导致 “Refused to execute inline script: Either the ' unsafe-inline' 关键字、哈希...或随机数需要启用内联执行”

javascript - 用单引号将字符串解析为 JSON?

javascript - ES6 中是否有命名符号的约定?