You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby on Rails中使用unsafe-hashes内容安全策略

解决Rails 6.1.7.9中CSP配置unsafe-hashes的问题

Rails 6.1的CSP DSL确实没有内置:unsafe_hashes的支持,直接添加会触发报错。你可以通过两种方式手动指定包含unsafe-hashes的CSP头:

方案1:直接在控制器中设置响应头

绕开Rails的CSP DSL,直接构造完整的CSP字符串并设置响应头,适合需要完全自定义CSP规则的场景。

在app/controllers/application_controller.rb中添加全局的before_action:

before_action :set_custom_csp

def set_custom_csp
  # 构造完整的CSP规则,替换成你的实际哈希值和其他需要的指令
  csp_rules = <<~CSP.strip
    default-src 'self';
    script-src 'self' 'unsafe-hashes' 'sha256-你的脚本哈希值';
    style-src 'self' 'unsafe-inline';
    img-src 'self' data:;
    # 按需添加其他directive,比如connect-src、font-src等
  CSP
  response.set_header('Content-Security-Policy', csp_rules)
end

方案2:修改CSP policy的directives属性

在Rails的CSP初始化文件中,先配置常规源,再手动修改script-src的指令内容,加入unsafe-hashes和哈希值。

在config/initializers/content_security_policy.rb中修改:

Rails.application.config.content_security_policy do |policy|
  # 先配置常规的CSP源
  policy.default_src :self
  policy.style_src :self, :unsafe_inline
  policy.img_src :self, :data

  # 手动更新script-src指令,添加unsafe-hashes和哈希值
  policy.directives[:script_src] = [
    :self,
    "'unsafe-hashes'",
    "'sha256-你的脚本哈希值'"
  ].join(' ')
end

注意事项

  1. 哈希值必须用单引号包裹,且要和你oninput事件中的代码完全匹配(包括空格、大小写)。可以直接复制浏览器控制台CSP报错信息里给出的哈希值,避免手动计算出错。
  2. 如果你的应用启用了CSP的report_only模式,需要对应修改Content-Security-Policy-Report-Only头,或者在初始化文件中用config.content_security_policy_report_only配置。

内容的提问来源于stack exchange,提问作者mattwise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:10:57