我有一个 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
?