http content_security_policy

扩展默认情况下对其应用了内容安全策略。默认策略限制了它们可以从中加载<script>和<object>资源的来源,并且禁止使用诸如之类的潜在不安全做法eval()。请参阅默认内容安全性策略以了解有关此含义的更多信息。

您可以使用"content_security_policy"清单密钥来放松或收紧默认策略。该密钥的指定方式与Content-Security-Policy HTTP标头相同。有关CSP语法的一般说明,请参见使用内容安全策略

例如,您可以使用此键执行以下操作:

  • 通过在script-src或object-src指令中提供脚本和对象的URL,允许扩展程序从其程序包外部加载脚本和对象。
  • 通过在script-src指令中提供脚本的哈希值允许扩展程序执行内联脚本。
  • eval()通过包含'unsafe-eval'在script-src指令中,允许扩展使用和类似的功能  。
  • 使用适当的策略指令policy directive(另一篇文章详细介绍),将允许的来源限制为其他类型的内容,例如图像和样式表。

您可以在此处指定政策的限制:

  • 该策略必须至少包含  script-src和  object-src指令,并且该  script-src指令必须包含关键字'self'
  • 远程源必须使用https:方案。
  • 远程源不得在公共后缀列表中的任何域中使用通配符(因此,虽然允许“ * .foo.blogspot.com”,但不允许“ * .co.uk”和“ * .blogspot.com”)。
  • 所有源都必须指定一个主机。
  • 对于源唯一允许方案是:blob:filesystem:moz-extension:,和https:
  • 唯一允许的关键词(default-src指令用作其他CSP fetch指令的后备)是:'none''self',和'unsafe-eval'

有效的例子

允许从“https://example.com”远程脚本:

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' https://example.com; object-src 'self'"</span></code></span>

允许来自“ jquery.com”的任何子域的远程脚本:

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' https://*.jquery.com; object-src 'self'"</span></code></span>

允许的eval() and friends:

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' 'unsafe-eval'; object-src 'self';"</span></code></span>

允许内联脚本"<script>alert('Hello, world.');</script>"

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' 'sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng='; object-src 'self'"</span></code></span>

保留其余策略,但还要求将映像与扩展名打包在一起:

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self'; object-src 'self'; img-src 'self'"</span></code></span>

要求所有类型的内容都应使用扩展名打包:

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"default-src 'self'"</span>
</code></span>

无效的例子

忽略该"object-src"指令的策略:

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' https://*.jquery.com;"</span></code></span>

忽略指令中"self"关键字的策略"script-src"

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src https://*.jquery.com; object-src 'self'"</span></code></span>

远程源方案不是https

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' http://code.jquery.com; object-src 'self'"</span></code></span>

通配符与通用域一起使用:

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' https://*.blogspot.com; object-src 'self'"</span></code></span>

源指定一个方案,但没有主机:

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' https:; object-src 'self'"</span></code></span>

指令包含不受支持的关键字'unsafe-inline'

<span style="color:#333333"><code class="language-json"><span style="color:#990055">"content_security_policy"</span><span style="color:#9a6e3a">:</span> <span style="color:#669900">"script-src 'self' 'unsafe-inline'; object-src 'self'"</span></code></span>

1. 注意:有效的示例显示了CSP中密钥的正确使用。但是,由于重大安全问题,addons.mozilla.org上列出的扩展名不允许使用CSP中带有'unsafe-eval','unsafe-inline',远程脚本,blob或远程源的扩展名。

浏览器兼容性

GitHub - mdn/browser-compat-data: This repository contains compatibility data for Web technologies as displayed on MDN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值