首页 > 解决方案 > 内容安全策略阻止所有 CDN

问题描述

我只是想用 Node.js 做一个简单的网站,但是我无法在不受内容安全策略阻止的情况下从 Bootstrap 获取 CSS 和 JS 文件的 CDN。

这是发生的事情:

我试图从这里放入带有 CDN 的元标记:内容安全策略:页面的设置阻止了资源的加载,但它不起作用,我什至遇到了更多错误。

我该如何解决?我找不到任何解决方案。

标签: javascripthtmljquerynode.jscontent-security-policy

解决方案


案例 1(有效):当我在浏览器中移动我的 HTML 文件(所以 C://... .html)时,它可以工作并获取所有 cdn

当您的网页从C://... .html它开始工作时,没有发布任何内容安全策略 (CSP),因此没有任何内容被阻止。

案例 2(不起作用):当我在 Node.js 中启动服务器(使用 express)然后转到 localhost:4000 时,由于内容安全策略,它没有获得 CDN(我可以在控制台中看到它)说它被它阻止了)

当您的网页从服务器工作时,会发布localhost:4000一个默认 CSP。NodeJS 在依赖项中有一个发布此默认 CSP 标头的 Helmet 中间件。

您可以禁用中间件:

// This disables the `contentSecurityPolicy` middleware but keeps the rest.
app.use(
  helmet({
    contentSecurityPolicy: false,
  })
);

或将其配置为允许外部 CDN,请参阅helmet.contentSecurityPolicy(options)部分中的详细信息。

注意:下次请在问题中添加控制台消息,它们在 CSP 的情况下会非常有帮助。


推荐阅读