为啥 CSP 安全标头会阻止 Iphone 上的谷歌地图?

Posted

技术标签:

【中文标题】为啥 CSP 安全标头会阻止 Iphone 上的谷歌地图?【英文标题】:Why CSP security header blocks google maps on Iphone?为什么 CSP 安全标头会阻止 Iphone 上的谷歌地图? 【发布时间】:2020-12-11 21:14:24 【问题描述】:

我有这个标题吗?

标头(“内容安全策略:” . “默认源代码‘无’;” . “script-src 'self' 'nonce- $ nonce' 'strict-dynamic' * 'unsafe-inline' https://maps.gstatic.com https://maps.googleapis.com;” . “style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;” . “img-src‘自我’数据:https://www.google-analytics.com https://im9.cz https://maps.gstatic.com https://maps.googleapis.com https://www .smartsuppchat.com https://widget-v2.smartsuppcdn.com https://twemoji.maxcdn.com https://files.smartsuppcdn.com maps.gstatic.com * .googleapis.com * .ggpht; " . “形式动作‘自我’;” . “base-uri '无';” . “清单-src‘无’;” . “对象源代码‘无’;” . “框架源 https://www.heureka.cz;” . “字体源 https://fonts.googleapis.com https://fonts.gstatic.com;” . “media-src 'self' https://widget-v2.smartsuppcdn.com;” . "connect-src 'self' https://bootstrap.smartsuppchat.com https://widget-v2.smartsuppcdn.com wss: //websocket-visitors.smartsupp.com https://www.google-analytics.com https : //files.smartsupp.com https://maps.gstatic.com https://maps.googleapis.com; " . “框架祖先'自我';”);

然后是这个 javascript,我在其中加载谷歌地图:

" src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyDkzPP8cFmN7hV_va8mYdrQOrBlL9VVlwY&callback=initMap" 异步延迟>

我正在解决的问题是它无法在我的 Iphone 上加载地图。它适用于其他任何地方(Windows、android)。开发人员工具 (F12) 不再向我显示任何错误。不幸的是,我没有 Apple,而且 Iphone 也没有显示任何东西(当然没有开发工具)。

有人知道怎么处理吗?

谢谢

'nonce- $ nonce' 所以我发现ios不支持nonce,这是一个问题。因为他不能用它。当我放弃随机数时,它可以工作,但它在支持 CSP3 的浏览器中不起作用。我不知道该怎么办。根据其他讨论,这应该被忽略并应该使用另一个“不安全的内联”规则,但由于某些未知原因它不是。

有人知道怎么处理吗?

【问题讨论】:

【参考方案1】:

有很多不支持 CSP2* 的旧浏览器。您可以添加 'unsafe-inline' 作为后备。较新的浏览器将默认使用'nonce-$nonce'。如果您使用 CSP evaluator* 检查您的政策,他们也会建议您为此添加此项。

参考资料:

*https://caniuse.com/contentsecuritypolicy2

*https://csp-evaluator.withgoogle.com/

【讨论】:

【参考方案2】:

'nonce-$nonce' 所以我发现iOS不支持nonce,这是个问题。因为他不能用它。当我放弃随机数时,它可以工作,但它在支持 CSP3 的浏览器中不起作用。我不知道该怎么办。根据其他讨论,这应该被忽略并应该使用另一个“不安全的内联”规则,但由于某些未知原因它不是。

    Safari 确实支持'nonce-value',但支持does not support 'strict-dymanic'。还有 'strict-dynamic' overrides 'unsafe-inline' 和所有基于主机的源。 因此,当您删除 'nonce-value' 时,剩余的 'strict-dynamic' 会取消 'unsafe-inline''self' 和 CSP3 兼容浏览器中的所有主机,但不会在 Safari 中取消。 因此,您观察到的效果。删除 'nonce-value' 时必须删除 'strict-dynamic',它们只能成对使用。

    您的 CSP 有一个 lot of errors,但看起来这些应该不会影响 Google 地图的工作。 因此,请检查您的 Iphone 中的Google Map test。可以选择 'nonce-value''strict-dynamic' 复选框并检查它们的支持。 如果测试正常,您只需要调整您的 CSP。

【讨论】:

以上是关于为啥 CSP 安全标头会阻止 Iphone 上的谷歌地图?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的“multipart/form-data”标头不能阻止发送预检 (OPTIONS) 请求?

将带有 nonce 的 CSP 标头添加到 Lambda Edge

即使添加了“unsafe-eval”,CSP 也会阻止对 function() 的调用

UIControl 阻止了我在 iPhone 上的所有视图

为啥我在设置 express-csp-header 后在 React PWA 应用程序上收到“default-src:'none'”内容安全策略错误?

CSP 在 NextJs 中阻止 Google Tag Manager 仍然使用 nonce