如何在 Ruby on Rails 中使用不安全哈希内容安全策略

问题描述 投票:0回答:1

我有一个 Ruby on Rails 应用程序(rails v 6.1.7.9),它允许用户生成内容,因此我想使用内容安全策略。 我有一个自定义 javascript 调用,我想在事件处理程序上触发(它是一个文本区域,我使用

oninput
事件更新预览)。

我正在尝试遵循 w3c 指南来使用

unsafe-hashes
:

MegaCorp, Inc. 无法完全摆脱类似合理时间表的以下 HTML:

<button id="action" onclick="doSubmit()">

他们决定使用“'unsafe-hashes'”以及与 doSubmit() 对应的哈希源表达式,而不是通过指定“'unsafe-inline'”来降低安全性,如下所示:

内容安全策略:脚本 src '不安全哈希' 'sha256-jzgBGA4UWFFmpOBq0JpdsySukE1FrEN5bUpoK8Z29fY='

Rails 允许我通过编辑 config/initializers/content_security_policy.rb:

 定义内容安全策略,如 
docs

中所述
Rails.application.config.content_security_policy do |policy|
  policy.default_src :self, :https
  policy.font_src    :self, :https, :data
  policy.img_src     :self, :https, :data
  policy.object_src  :none
  policy.script_src  :self, :https
  policy.style_src   :self, :https

  # Specify URI for violation reports
  policy.report_uri "/csp-violation-report-endpoint"
end

但是,我找不到任何方法在

unsafe-hashes
下指定
policy.script_src
。 如果我在引号中添加
:unsafe_hashes
和我的 sha256 字符串,则会收到以下错误:

Unknown content security policy source mapping: :unsafe_hashes

DSL 似乎只需要预定义的源,我如何手动指定应包含在 CSP 标头中的文本,或者使用

unsafe-hashes

ruby-on-rails content-security-policy
1个回答
0
投票

Rails 6.1.7.9 没有

unsafe_hashes
的映射,该映射是通过此 commit7.1

中引入的

话虽这么说,看看提交,您似乎可以使用:

 policy.script_src  :strict_dynamic, "'unsafe-hashes'", "'YOUR_SHA256_STRING'"
© www.soinside.com 2019 - 2024. All rights reserved.