拒绝连接到 x,因为它违反了以下内容安全策略指令 (connect-src)
Refused to connect to x because it violates the following Content Security Policy directive (connect-src)
我在 heroku 上部署了一个 MERN 应用程序,并为 CSP 设置了这些值:
<meta
http-equiv="Content-Security-Policy"
content="connect-src https://api.themoviedb.org 'self'; default-src 'self'; base-uri 'self'; object-src 'none'; script-src 'unsafe-inline' 'self' ; style-src 'unsafe-inline' 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com"
/>
然而这是我在 Chrome 控制台中得到的:
拒绝连接到 [URL],因为它违反了以下内容安全策略指令:“default-src 'self'”。请注意,'connect-src' 未明确设置,因此 'default-src' 用作后备。
当我检查页面时可以在 index.html 中看到它时,为什么它告诉我未设置连接源?
CSP 的版本(或级别)具有扩展原始规范的新支持功能。
通过 html 元 header 为 CSP 提供服务被认为是遗留的并且有一些缺点。
尝试通过请求的 HTTP header 设置 CSP
此外,作为最佳实践,请将 default-src
作为第一个指令。
不幸的是,Shai Alon 的 被标记为“正确答案”,但完全错误并提供了误导性信息。
<meta http-equiv="Content-Security-Policy>
元标记 不 被视为旧标记。
在某些情况下,元标记是将政策传递到页面的唯一方式。
-
best practice make the default-src you first directive.
废话。 CSP 中的指令顺序没有任何意义。此外,Google 的 strict CSP 根本没有 default-src 指令。
- topicstarter 的问题是
node.js
在依赖项中包含 Helmet 中间件。 Helmet v4 发布了一个没有 connect-src
指令的 default CSP HTTP header。
这就是 topicstarter 观察以下消息的原因:
Refused to connect to [URL] because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.
注意这不是来自元标记的 CSP 规则,而是 Helmet 中间件的默认 CSP 规则。
通过元标记添加第二个 CSP 来缓解默认 CSP 确实失败了,因为确实同时应用了 2 个 CSP - 所有来源都应通过两个 CSP。
所以有 2 个选项:
- 禁用头盔
helmet.contentSecurityPolicy()
并使用元标记来交付 CSP。
- 删除元标记 CSP 并将
connect-src
规则添加到 helmet.contentSecurityPolicy(options)
。
我在 heroku 上部署了一个 MERN 应用程序,并为 CSP 设置了这些值:
<meta
http-equiv="Content-Security-Policy"
content="connect-src https://api.themoviedb.org 'self'; default-src 'self'; base-uri 'self'; object-src 'none'; script-src 'unsafe-inline' 'self' ; style-src 'unsafe-inline' 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com"
/>
然而这是我在 Chrome 控制台中得到的:
拒绝连接到 [URL],因为它违反了以下内容安全策略指令:“default-src 'self'”。请注意,'connect-src' 未明确设置,因此 'default-src' 用作后备。
当我检查页面时可以在 index.html 中看到它时,为什么它告诉我未设置连接源?
CSP 的版本(或级别)具有扩展原始规范的新支持功能。
通过 html 元 header 为 CSP 提供服务被认为是遗留的并且有一些缺点。
尝试通过请求的 HTTP header 设置 CSP
此外,作为最佳实践,请将 default-src
作为第一个指令。
不幸的是,Shai Alon 的
<meta http-equiv="Content-Security-Policy>
元标记 不 被视为旧标记。
在某些情况下,元标记是将政策传递到页面的唯一方式。-
best practice make the default-src you first directive.
废话。 CSP 中的指令顺序没有任何意义。此外,Google 的 strict CSP 根本没有 default-src 指令。
- topicstarter 的问题是
node.js
在依赖项中包含 Helmet 中间件。 Helmet v4 发布了一个没有connect-src
指令的 default CSP HTTP header。
这就是 topicstarter 观察以下消息的原因:
Refused to connect to [URL] because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.
注意这不是来自元标记的 CSP 规则,而是 Helmet 中间件的默认 CSP 规则。
通过元标记添加第二个 CSP 来缓解默认 CSP 确实失败了,因为确实同时应用了 2 个 CSP - 所有来源都应通过两个 CSP。
所以有 2 个选项:
- 禁用头盔
helmet.contentSecurityPolicy()
并使用元标记来交付 CSP。 - 删除元标记 CSP 并将
connect-src
规则添加到helmet.contentSecurityPolicy(options)
。