如何将 Google 的全局站点标签与子资源完整性结合起来?
Posted
技术标签:
【中文标题】如何将 Google 的全局站点标签与子资源完整性结合起来?【英文标题】:How can I combine Google's Global Site Tag with Subresource Integrity? 【发布时间】:2018-12-09 09:34:58 【问题描述】:我正在按照steps described by Google 在我的网站上实施全球跟踪。但我也想让我的Subresource Integrity
(SRI) 保持最新状态。所以我运行以下命令来查找gtag.js
的完整性哈希。
> curl -s https://www.googletagmanager.com/gtag/js |\
openssl dgst -sha384 -binary |\
openssl base64 -A
将此作为完整性属性添加到具有crossorigin="anonymous"
属性的script
标记,会导致浏览器无法加载gtag 脚本。原因:
子资源完整性:资源“https://www.googletagmanager.com/gtag/js”具有完整性属性,但该资源要求请求启用 CORS 以检查完整性,但事实并非如此。由于无法强制执行完整性,该资源已被阻止。
明显的原因是 google 返回的 access-control-allow-origin
标头,并且只允许同一主机来源。
有谁知道这个脚本是否有不同的主机?还有其他方法可以在您的网站中采用 gtag 吗?
【问题讨论】:
您是否在其他地方找到了答案/解决方案? 不,我没有。我也尝试通过论坛和反馈向谷歌询问,但没有任何回应。 【参考方案1】:解决此问题的唯一方法可能是简单地获取资源,将其存储在同一服务器上,然后设置您自己的 Access-Control-Allow-Origin
标头。
这有点傻 - 因为它不仅降低了通过 CDN 分发资源的价值,而且有效地使 SRI 毫无意义(因为您使用的是静态本地副本,而不是远程副本,因此需要减少通过 SRI 进行验证的风险)。
这也仅在资源保持静态时才有效。但由于 SRI 依赖资源是静态的(以便哈希匹配),因此对服务器上资源的任何更改都会导致 SRI 强制执行,从而导致资源无论如何都失败。
因此它可能并不比首先使用 SRI 更脆弱(除非您正在动态生成资源的校验和......此时首先使用 SRI 的意义较小) .
2020 年 9 月 22 日更新:看起来像 2020 年 4 月 Google 方面的问题 may have been resolved。
【讨论】:
以上是关于如何将 Google 的全局站点标签与子资源完整性结合起来?的主要内容,如果未能解决你的问题,请参考以下文章
将 Google Analytics.js 转换为 gtag.js?
当代码具有不完整的 java doc 标签时,Maven 站点因 Java 8 而失败
3.2.4 Google Tag Manager实战指南——跨站跟踪