#javascript #firefox #windows-10 #content-security-policy #websecurity
#javascript #firefox #windows-10 #content-security-policy #веб-безопасность
Вопрос:
У нас есть приведенный ниже набор политик CSP Report Only, который позволяет всем скриптам загружаться из одного источника с использованием ‘Self’. Но в браузере Firefox 78 в Windows NT 10 он по-прежнему сообщает о загрузке скрипта из того же источника как об ошибке.
CspReport {
blockedUri='https://staging.global.com/app/ui/home/home.js',
documentUri='https://staging.global.com/app/ui/home/home.html',
violatedDirective='script-src'
disposition='null',
effectiveDirective='null',
originalPolicy='default-src 'none'; connect-src 'self' https://www.google-analytics.com; font-src 'self' data: https://fonts.gstatic.com; img-src 'self' data: blob: https://www.google-analytics.com https://www.googletagmanager.com https://ssl.gstatic.com https://www.gstatic.com; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://www.google-analytics.com https://www.googletagmanager.com https://tagmanager.google.com https://maps.googleapis.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com https://fonts.googleapis.com; manifest-src 'self'; frame-ancestors 'self'; frame-src 'self';
report-uri /app/report
}
Сведения о браузере :
userAgent='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'
Политика CSP :
'default-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline;
Пожалуйста, помогите решить эту проблему.
Заранее спасибо.
Комментарии:
1. Не могли бы вы показать содержимое поля «исходная политика»? И это произошло в вашем браузере (вы можете посмотреть сообщение об ошибке источника в консоли разработчика) или у некоторых пользователей, и вы можете просматривать его только в отчетах о нарушениях?
2. @granty Я добавил originalPolicy. Пожалуйста, проверьте. Об этом сообщается из браузера клиента, поскольку мы включили CSP в режиме только для отчетов. Мы не можем его воспроизвести.
Ответ №1:
Вы добавили очень полезные поля, поэтому мы можем провести расследование, используя метод дедукции Шерлока Холмса.
disposition='null'
означает, что мы имеем дело не с CSP3-браузером.disposition
Поле было введено только в CSP3 и может быть либо «принудительно», либо «сообщить».violatedDirective='script-src'
effectiveDirective='null'
подтверждает предположение в пункте 1 выше. Согласно спецификации CSP3, как effectiveDirective, так и violatedDirective имеют одинаковое значение. Это сделано специально для поддержания обратной совместимости.
Следовательно, этот отчет о нарушении определенно был отправлен браузером CSP2 (или даже CSP1). Но Mozilla Firefox v78 полностью поддерживает CSP3.
Это означает, что ваш посетитель по какой-то причине заменил user agent.
Ваш CSP правильный, законный браузер Firefox не должен отправлять никаких отчетов.
Я предполагаю, что мы заключили сделку с parser-bot, который использует устаревший эмулятор браузера. Если вы регистрируете IP-адреса в отчетах, вы можете проверить это через службу whois, которая принадлежит одному общедоступному хостингу.
Также «страна по IP» может помочь определить, ваш это реальный клиент или нет.
Но одна вещь остается неясной — ваши приложения имеют доступ, защищенный паролем. Без авторизации доступ блокируется на странице, на которой нет заголовка CSP.
В любом случае для поддержки старых браузеров вы можете явно добавить https://staging.global.com в политику:
script-src 'self' 'unsafe-eval' 'unsafe-inline' https://staging.global.com;
и обратите внимание, исчезнет ли это нарушение или нет.