Как я могу объединить глобальный тег сайта 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 нет реальной точки).