为什么 "Content Security Policy" 的自定义 headers 在 github 上不起作用?

Why custom headers for "Content Security Policy" not working on github?

我正在尝试在 NodeJS 的帮助下提供 SVG 响应。这个 SVG 有一个小的内联 JavaScript 代码,可以动态计算 SVG 的宽度。当使用浏览器直接调用 API 时,一切正常。但是,当我在 GitHub 的自述文件中使用这些 API(在自述文件中用于服务器 SVG)时,它不允许我 运行 存储在 SVG 中的内联 JavaScript 代码。

添加任何 SVG 后,github 会生成一个 link,它看起来像 :: https://camo.githubusercontent.com/some-unique-id-for-each-content 当我直接在浏览器中打开这个 link 时,它在浏览器的控制台中显示以下错误:

Refused to execute inline script because it violates the following Content Security Policy directive: "default-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-'), or a nonce ('nonce-...') is required to enable inline execution. Note also that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.

但问题是我在发送响应之前设置了自定义 Content-Security-Policy headers,如下所示:

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 自述文件。我也尝试设置哈希值,但没有任何影响 headers.

任何人都可以纠正我或告诉我这里有什么问题吗?

Github 发布它自己的 Content-Security-Policy header: 如您所见,它完全限制了 javascript 的使用。

因为 svg 发布与上面相同 headers,因此禁止使用 javascript。

所以不是您的 CSP 锁 javascript,而是 github 的锁。

GitHub 不允许用户在您查看 SVG 时执行自定义 JavaScript,因为他们设置了自己的 Content-Security-Policy header。那是因为一般来说,不受信任的 JavaScript 可以做恶意的事情,并且 GitHub 不希望人们窃取凭据或成为恶意软件载体。

在 GitHub 上呈现的所有 user-provided SVG 都将受到此限制,因为 GitHub 上的所有图像都通过 Camo 代理以防止恶意 JavaScript 和跟踪,并且因此,所有图像都与 GitHub 的 Content-Security-Policy header 一起发送,而不是您的。如果您想在 SVG 中 运行 JavaScript,只需在您自己的站点上完成即可。