heroku 拒绝连接到x,因为它违反了以下内容安全策略指令(connect-src)

l0oc07j2  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(238)

我在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”用作回退。

为什么它告诉我connect-src没有设置,而我在检查页面时可以在index.html中看到它?

dkqlctbz

dkqlctbz1#

不幸的是,标记为“正确答案”的answer,是完全错误的,并提供了误导性的信息。

  1. <meta http-equiv="Content-Security-Policy> meta标记被视为传统标记。
    在某些情况下, meta标记是将策略传递到页面的唯一方式。
    1.最佳做法是将default-src作为第一个指令。
    废话,CSP中的指令顺序没有任何意义,而且Google的strict CSP根本没有default-src指令。
    1.问题作者的问题是node.js在依赖项中包含了Helmet中间件。Helmet v4发布了一个没有connect-src指令的default CSP HTTP header
    这就是为什么问题作者观察下面的消息:
    拒绝连接到[URL],因为它违反了以下内容安全策略指令:“default-src 'self'"。请注意,未显式设置**”connect-src“,因此”default-src“将用作回退**。

请注意这不是来自元标记的CSP规则,而是Helmet中间件的默认CSP规则。

通过 meta标记添加第二个CSP来缓解该默认CSP失败,因为同时应用了2个CSP-所有源都应通过这两个CSP。
所以有两个选择:

  • 禁用Helmet helmet.contentSecurityPolicy()并使用元标记来提供CSP。
  • 删除 meta标记CSP并将connect-src规则添加到helmet.contentSecurityPolicy(options)中。
2uluyalo

2uluyalo2#

CSP有一些版本(或级别),其中新支持的功能扩展了原始规范。通过html meta标头提供CSP被认为是传统的,并且有一些缺点。尝试通过请求的HTTP标头设置CSP此外,作为最佳实践,请首先使用default-src指令。

相关问题