Content-Security-Policy: скрипт-src ‘self’ не работает в Firefox 78 Windows NT 10 для загрузки скриптов из того же источника

#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:

Вы добавили очень полезные поля, поэтому мы можем провести расследование, используя метод дедукции Шерлока Холмса.

  1. disposition='null' означает, что мы имеем дело не с CSP3-браузером. disposition Поле было введено только в CSP3 и может быть либо «принудительно», либо «сообщить».
  2. 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;
  

и обратите внимание, исчезнет ли это нарушение или нет.