web-dev-qa-db-ja.com

Googleのグローバルサイトタグとサブリソースの整合性を組み合わせるにはどうすればよいですか?

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を採用する別の方法はありますか?

12
Roald Bankras

これに対する唯一の回避策は、リソースをフェッチして同じサーバーに保存し、独自のAccess-Control-Allow-Originヘッダーを設定することです。

これは少しばかげています-CDNを介してリソースを分散することの価値を減らすだけでなく、SRIを実質的に無意味にします(リモートのローカルコピーではなく、リモートのローカルコピーで作業しているため、操作のリスクを減らす必要があります) SRIで確認することにより)。

これは、リソースが静的である限りのみ機能します。ただし、SRI dependsはリソースが静的であるため(ハッシュが一致するため)、サーバー上のリソースに変更を加えると、SRIが施行されてリソースが失敗します。したがって、そもそもSRIを使用するよりも脆弱ではない可能性があります(リソースのチェックサムをオンザフライで生成している場合を除きます。その時点では、SRIに実際のポイントはありません)。

1
Royce Williams