我正在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吗?
答案 0 :(得分:1)
唯一的解决方法是简单地获取资源,将其存储在同一服务器上,然后设置自己的Access-Control-Allow-Origin
标头。
这有点愚蠢-因为它不仅降低了通过CDN分发资源的价值,而且还有效地使SRI毫无意义(因为您使用的是静态本地副本,而不是远程副本,因此可以减少通过SRI进行验证的可能性很大。
这也将仅在资源保持静态的情况下起作用。但是由于SRI 依赖于资源是静态的(因此哈希将匹配),因此服务器上资源的任何更改都将导致SRI强制执行,无论如何都会导致资源失败。因此,它可能比起初使用SRI并不脆弱(除非您正在动态生成资源的校验和...那时,SRI首先没有真正意义)。