如何将Google的全球站点标签与子资源完整性结合在一起?

时间:2018-06-30 11:22:45

标签: google-analytics gtag.js

我正在steps described by Google之后在我的网站上实施全局跟踪。但我也想保持我的Subresource Integrity(SRI)为最新。因此,我运行以下命令来查找gtag.js的完整性哈希。

> curl -s https://www.googletagmanager.com/gtag/js |\
  openssl dgst -sha384 -binary |\
  openssl base64 -A

将此属性作为具有script属性的crossorigin="anonymous"标签添加为完整性属性,会导致浏览器无法加载gtag脚本。原因:

  

子资源完整性:资源'https://www.googletagmanager.com/gtag/js'具有完整性属性,但是该资源要求启用了CORS的请求才能检查完整性,但不是。由于无法强制执行完整性,因此资源已被阻止。

一个明显的原因是Google返回的access-control-allow-origin标头,并且只允许来自同一主机。

有人知道此脚本是否有其他主机吗?还有其他方法可以在您的网站中采用gtag吗?

1 个答案:

答案 0 :(得分:1)

唯一的解决方法是简单地获取资源,将其存储在同一服务器上,然后设置自己的Access-Control-Allow-Origin标头。

这有点愚蠢-因为它不仅降低了通过CDN分发资源的价值,而且还有效地使SRI毫无意义(因为您使用的是静态本地副本,而不是远程副本,因此可以减少通过SRI进行验证的可能性很大。

这也将仅在资源保持静态的情况下起作用。但是由于SRI 依赖于资源是静态的(因此哈希将匹配),因此服务器上资源的任何更改都将导致SRI强制执行,无论如何都会导致资源失败。因此,它可能比起初使用SRI并不脆弱(除非您正在动态生成资源的校验和...那时,SRI首先没有真正意义)。