内容安全策略 img-src 数据 url 哈希

Posted

技术标签:

【中文标题】内容安全策略 img-src 数据 url 哈希【英文标题】:Content Security Policy img-src hash of data url 【发布时间】:2020-10-26 19:37:11 【问题描述】:

我试图将我的 CSP img-src 限制为我使用的 one 图像,该图像恰好在我们的 css 中被编码为数据 URL。像这样的:

background-image: url('data:image/svg+xml;utf8,<svg ...');

我不希望通过执行“img-src data:”来打开所有数据:图像,所以理想情况下我想做的只是使用哈希源格式:

img-src sha512-SHA_OF_DATA_URL_ABOVE

但是,我无法让它工作。我试过散列实际的 SVG,以及包括 mime 类型和数据方案,但没有运气:

> echo -n "<svg width=\"14px\"..." | openssl dgst -sha512 -binary | openssl enc -A -base64 
> echo -n "image/svg+xml;utf8,<svg width=\"14px\"..." | openssl dgst -sha512 -binary | openssl enc -A -base64 
> echo -n "data:image/svg+xml;utf8,<svg width=\"14px\"..." | openssl dgst -sha512 -binary | openssl enc -A -base64 

当我将它们放入 img-src 时,这些似乎都不起作用。我猜数据 URL 图像的奇怪边缘情况是否不支持哈希方法?

【问题讨论】:

【参考方案1】:

CSP2 仅对 内联脚本 元素 (https://www.w3.org/TR/CSP2/#script-src-hash-usage) 和 内联样式 元素 (https://www.w3.org/TR/CSP2/#style-src-hash-usage) 实现了哈希使用。

CSP3 通过 SRI (https://www.w3.org/TR/CSP3/#external-hash) 将使用哈希扩展到外部脚本

不支持通过哈希允许&lt;img&gt; 元素,将来可能会支持。

【讨论】:

以上是关于内容安全策略 img-src 数据 url 哈希的主要内容,如果未能解决你的问题,请参考以下文章

内容安全策略指令:“img-src 数据:”错误

内容安全策略拒绝列出白名单

来自不同域区域的内容安全策略和 Google Analytics 图像 [重复]

如何找到内容安全政策违规报告的来源?

拒绝加载字体 '<URL>' 因为它违反了以下内容安全策略指令 default-src ,所以使用 default-src 作为后备

JWT认证方案与禁用令牌策略