Как я могу объединить глобальный тег сайта Google с целостностью субресурса?

Я внедряю глобальное отслеживание на моем сайте, следуя инструкциям Google. Но я также хочу сохранить Subresource Integrity (НИИ) в курсе. Поэтому я запустил следующую команду, чтобы найти хеш целостности для 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 для проверки целостности, а это не так. Ресурс был заблокирован, поскольку целостность не может быть обеспечена.

Очевидная причина access-control-allow-origin заголовок, который возвращает Google и разрешает только происхождение того же хоста.

Кто-нибудь знает, есть ли другой хост для этого скрипта? Есть ли другой способ перенести gtag на ваш сайт?

1 ответ

Единственный обходной путь для этого может быть просто получить ресурс, сохранить его на том же сервере, а затем установить свой собственный Access-Control-Allow-Origin заголовок.

Это немного глупо - потому что это не только снижает ценность распределения ресурса через CDN, но и делает SRI бессмысленным (поскольку вы работаете со статической локальной копией, а не с удаленной, это гарантирует снижение риска манипуляций). сверив это с НИИ).

Это также будет работать только до тех пор, пока ресурс остается статичным. Но поскольку SRI зависит от статичности ресурса (так что хеш будет совпадать), любое изменение ресурса на сервере приведет к принудительному применению SRI, что в любом случае приведет к сбою ресурса. Так что это может быть не более хрупким, чем использование SRI в первую очередь (если вы не генерируете контрольную сумму ресурса на лету... в этот момент в SRI нет реальной точки).

Другие вопросы по тегам