我正在尝试在 NodeJS 的帮助下提供 SVG 响应。这个 SVG 有一个小的内联 JavaScript 代码,可以动态计算 SVG 的宽度。当使用浏览器直接调用 API 时,一切正常。但是当我在 GitHub 的自述文件中使用这些 API(在自述文件中为 SVG 提供服务器)时,它不允许我运行这个存储在 SVG 中的内联 JavaScript 代码。
当添加任何 SVG 时,github 会生成一个链接,它看起来像 :: https://camo.githubusercontent.com/some-unique-id-for-each-content,当我直接在浏览器中打开此链接时,它会显示浏览器控制台中出现以下错误:
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“default-src 'none'”。启用内联执行需要“unsafe-inline”关键字、哈希(“sha256-”)或随机数(“nonce-...”)。还要注意 'script-src' 没有明确设置,所以 'default-src' 用作后备。
但问题是我在发送响应之前设置了自定义 Content-Security-Policy 标头,如下所示:
res.setHeader("Content-Type", "image/svg+xml");
res.setHeader("Content-Security-Policy", "default-src 'self'; img-src data:; style-src 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
而且似乎自定义 script-src 不适用于 github 自述文件。我也尝试设置哈希值,但没有任何影响标题。
任何人都可以纠正我或告诉我这里有什么问题吗?
GitHub 不允许用户在您查看 SVG 时执行自定义 JavaScript,因为他们设置了自己的Content-Security-Policy
标头。这是因为一般来说,不受信任的 JavaScript 可以做恶意的事情,GitHub 不希望人们窃取凭据或成为恶意软件的载体。
在 GitHub 上呈现的所有用户提供的 SVG 都将受到此限制,因为 GitHub 上的所有图像都通过 Camo 代理以防止恶意 JavaScript 和跟踪,因此所有图像都与 GitHub 的Content-Security-Policy
标头一起发送,而不是您的标头。如果您想在 SVG 中运行 JavaScript,则只需在您自己的站点上完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句