Chrome控制台错误:“内容安全策略”以仅报告模式提供,但未指定“ report-uri”

Ted*_*ler 8 javascript google-chrome google-api

从今天开始,在Chrome 73.0.3683.103控制台中,我看到以下错误:

内容安全策略'script-src'report-sample''nonce-PNYOS1z63mBa / Tqkqyii''unsafe-inline'; object-src'none'; base-uri'self'以仅报告方式提供,但是没有指定'report-uri'; 该政策将无效。请添加“ report-uri”指令,或通过“ Content-Security-Policy”标头提供该策略。

我相信这是来自脚本src =“ https://apis.google.com/js/platform.js” ...似乎一切正常。启动器似乎是https://content.googleapis.com/static/proxy.html?usegapi=1 ...

是什么原因造成的,我该如何解决?

编辑:从今天起,我不再看到错误。所以我认为谷歌已经解决了这个问题。

win*_*wes 6

如果父页面归您所有,您可以采取一些措施来纠正此问题。如果父页面不归您所有,则您无能为力,但此警告不会影响您的体验。

首先介绍一下背景:

什么是 CSP?

内容安全策略或 CSP 是您的服务器可以设置的标头,它告诉浏览器强制执行白名单,其中包含可以在您的页面上运行的内容、它的来源以及如何运行。例如,您可以限制允许从哪些域中获取 JavaScript,JavaScript 是否可以内联运行,或者 JavaScript 可以调用 xhr 的位置。

CSP 可以在两种模式下运行:阻塞报告

在阻止模式下,浏览器会强制执行 CSP 中制定的策略并将这些限制应用于您的网页。在阻止模式下,您可以选择将任何被阻止的内容报告回您在report-uriCSP 指令中指定的端点。在报告模式下,没有任何东西被阻止,只有被阻止的东西才会被报告给策略report-uri指令中指定的端点。

您的具体问题

浏览器警告说您正在报告模式下运行,但您尚未指定 a,report-uri因此它不知道在哪里报告违规行为。实际上,您的 CSP 除了浪费带宽之外什么都不做,因为它没有报告或阻止它发现的任何问题。

这让您有几个选择:

  1. 没做什么。您的 CSP 不会就任何问题(控制台中的消息之外)向您发出警报,也不会阻止任何内容。
  2. 添加一个report-uri(类似于report-uri: https://example.com/csp_reports)来接收请求。即使您在该端点没有收到任何信息,您的特定控制台警告也会消失(即使未阻止,您仍会收到针对特定 CSP 违规的控制台错误)。
  3. 将 CSP 切换到阻塞模式。您不会收到任何报告,但警告会消失,因为 CSP 现在用于阻止内容。如果它说它阻塞了很多东西,请注意不要这样做。这表明您的网站可能会中断。首先,通过调整 CSP 或更改您正在使用的资源来解决它阻塞的问​​题,然后将其切换到阻塞模式。
    1. 将 CSP 切换到阻塞模式并添加一个report-uri. 从长远来看,这是从安全角度来看的最佳解决方案,但第 3 步中的警告适用。

如果是我,我会先添加一个report-uri来了解我的页面正在生成什么警告(注意有些可能是由浏览器扩展触发的 - 你对此无能为力,但没关系)。一旦我理解了常见的警告,我就会调整 CSP 以及我必须确保页面加载的资源,而控制台中没有任何警告或错误。然后我会将 CSP 切换到阻塞模式以利用它提供的安全优势。


小智 1

这与服务器/后端级别设置有关。

如果您有权访问提供代码的服务器,则可以设置标头设置。所以目前Content-Security-Policy-Report-Only这已经被设置为没有所有必需的参数。您可以检查那里并删除此标头(如果不需要),或设置所需的参数。

您可以从这里找到标题详细信息