Событие нарушения политики безопасности контента не запускается

#google-chrome #content-security-policy

#google-chrome #content-security-policy

Вопрос:

Я пытаюсь настроить заголовки CSP для своего приложения. Я намеренно не включил наш CDN из font-src style-src директив и, чтобы инициировалось нарушение. Я вижу нарушения в консоли Chrome Dev Tools, но запрос к csp-endpoint указанному в заголовке не запускается. Я попытался установить report-uri атрибут, но это тоже не помогло. Я тестирую это на Chrome 84, который должен поддерживать report-to директиву. Есть ли что-то, чего мне здесь не хватает?

 Content-Security-Policy-Report-Only: default-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.googletagmanager.com www.google-analytics.com; style-src 'self' data: 'unsafe-inline' www.tagmanager.google.com www.fonts.googleapis.com fast.fonts.net; img-src 'self' data: www.googletagmanager.com www.google-analytics.com; form-action 'self'; font-src 'self'; connect-src 'self'; report-to csp-endpoint

Report-To: {"endpoints":[{"url":"http://localhost:8080/myapp/csp-violation-report"}],"group":"csp-endpoint","max_age":10886400}
  

Ответ №1:

  1. конечные точки для отправки отчетов должны иметь безопасный контекст (фактически — https:). Незащищенные конечные точки будут проигнорированы.

  2. Существуют некоторые проблемы с разрешением имени локального хоста, не все пользовательские агенты считают его заслуживающим доверия. localhost Должно соответствовать определенным (пункт 5) правилам разрешения имен (см., пожалуйста, Пусть «localhost» будет обновлением RFC localhost).

Кратко — попробуйте использовать https://127.0.0.1:8080/myapp/csp-violation-report . Для Chrome может быть достаточно безопасного http s: https://localhost:8080/myapp/csp-violation-report (Chrome 84 поддерживает директиву report-to, но Firefox — нет).

Комментарии:

1. Добавляя к этому 2 проблемы с отладкой, с которыми я столкнулся при реализации этого на сервере apache. 1. даже если json.org/json-en.html говорит, что одинарные кавычки не разрешены в JSON, при реализации Report-To заголовка я смог (и мог использовать только) одинарные кавычки: Header always set Report-To "{'group': 'csp-endpoint', 'max_age': 10886400, 'url': '/csp-violation-report-endpoint.php'}" . 2. Блокировщики рекламы на стороне клиента могут заблокировать СООБЩЕНИЕ, чтобы сообщить о нарушении CSP. У меня были проблемы с uBlock при тестировании моего решения, но отключение uBlock работало нормально.