Политика безопасности контента сообщает об ошибке, несмотря на то, что blocked-uri присутствует в исходной политике.

Вопрос или проблема

Мы добавили Content-Security-Policy-Report-Only на наш сайт и сейчас изучаем отчеты, которые были отправлены нам. Мы получили этот интересный отчет о пикселе отслеживания Facebook.

{
    "csp-report": {
        "document-uri": "https://app.goreact.com/dashboard/sessions/33788610",
        "referrer": "",
        "violated-directive": "img-src",
        "effective-directive": "img-src",
        "original-policy": "default-src 'self' \t   https://*.goreact.com \t   https://*.goreact.com:* \t   https://*.goreact.eu; \tscript-src 'self' 'unsafe-inline' 'unsafe-eval' \t   blob: \t   https://*.googletagmanager.com \t   https://*.google-analytics.com \t   https://*.goreact.com \t   https://*.goreact.com:* \t   https://*.goreact.eu \t   https://*.youtube.com \t   https://assets.zendesk.com \t   https://cdn.bizible.com \t   https://cdn.jsdelivr.net \t   https://connect.facebook.net \t   https://edge.fullstory.com \t   https://googleads.g.doubleclick.net \t   https://js.hs-analytics.net \t   https://js.hs-banner.com \t   https://js.hs-scripts.com \t   https://js.hsleadflows.net \t   https://js.hsadspixel.net \t   https://js.intercomcdn.com \t   https://snap.licdn.com \t   https://static.ads-twitter.com \t   https://static.zdassets.com \t   https://widget.intercom.io; \tstyle-src 'self' 'unsafe-inline' \t   https://*.goreact.com \t   https://*.goreact.com:* \t   https://*.goreact.eu \t   https://cdn.jsdelivr.net \t   https://fonts.googleapis.com; \timg-src 'self' \t   https://*.analytics.google.com \t   https://*.googletagmanager.com \t   https://*.google-analytics.com \t   https://*.goreact.com \t   https://*.goreact.com:* \t   https://*.goreact.eu \t   https://*.youtube.com \t   https://analytics.twitter.com \t   https://bam.nr-data.net \t   https://cdn.bizible.com \t   https://px.ads.linkedin.com \t   https://t.co \t   https://track.hubspot.com \t   https://www.facebook.com \t   https://www.google.com \t   https://www.linkedin.com; \tfont-src 'self' \t   https://*.goreact.com \t   https://*.goreact.com:* \t   https://*.goreact.eu \t   https://cdn.jsdelivr.net \t   https://fonts.gstatic.com \t   https://themes.googleusercontent.com; \tconnect-src 'self' \t   https://*.amazonaws.com \t   https://*.analytics.google.com \t   https://*.googletagmanager.com \t   https://*.google-analytics.com \t   https://*.goreact.com \t   https://*.goreact.com:* \t   https://*.goreact.eu \t   https://api-iam.intercom.io \t   https://api.hubapi.com \t   https://api-standard.opentok.com \t   https://analytics.google.com \t   https://bam.nr-data.net \t   https://config.opentok.com \t   https://edge.fullstory.com \t   https://ekr.zdassets.com \t   https://forms.hubspot.com \t   https://goreact.zendesk.com \t   https://hlg.tokbox.com \t   https://px.ads.linkedin.com \t   https://rs.fullstory.com \t   https://speakworks.pubnub.com \t   https://stats.g.doubleclick.net \t   https://www.facebook.com \t   https://www.google.com \t   wss://*.ibm.com \t   wss://*.media.prod.tokbox.com; \tframe-src 'self' \t   https://*.googletagmanager.com \t   https://*.goreact.com \t   https://*.goreact.com:* \t   https://*.goreact.eu \t   https://*.youtube.com \t   https://td.doubleclick.net \t   https://www.facebook.com; \tobject-src 'none'; \treport-uri https://app.goreact.com/api/v2/csp-report;",
        "disposition": "report",
        "blocked-uri": "https://www.facebook.com/privacy_sandbox/pixel/register/trigger/?id=1226001014150573&ev=SubscribedButtonClick&dl=https%3A%2F%2Fapp.goreact.com%2Fdashboard%2Fsessions%2F33788610&rl=&if=false&ts=1730131123374&cd[buttonFeatures]=%7B%22classList%22%3A%22btn%20btn-default%22%2C%22destination%22%3A%22%22%2C%22id%22%3A%22%22%2C%22imageUrl%22%3A%22%22%2C%22innerText%22%3A%22Excellent%22%2C%22numChildButtons%22%3A0%2C%22tag%22%3A%22button%22%2C%22type%22%3A%22button%22%2C%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D&cd[buttonText]=Excellent&cd[formFeatures]=%5B%5D&cd[pageFeatures]=%7B%22title%22%3A%22GoReact%20%7C%20Dashboard%20-%20ASL%20I-%20Period%206%22%7D&sw=1280&sh=720&ud[external_id]=36e4da20df0937f58a42fde32d66440e&v=2.9.174&r=stable&a=hubspot&ec=31&o=4126&fbp=fb.1.1728910231395.736716853676990415&ler=empty&cdl=API_unavailable&it=1730131053674&coo=false&es=automatic&tm=3&exp=i2&rqm=FGET",
        "status-code": 200,
        "script-sample": ""
    }
}

Обратите внимание, что несмотря на то, что https://www.facebook.com содержится в оригинальной политике в разделе img-src, это все равно вызывает ошибку. Я искал, чтобы узнать, испытывал ли кто-то еще такую проблему, но не смог найти другие ответы, которые не касались blob, data или отсутствующих точек с запятой. Я трижды проверил, что точки с запятой между директивами корректны. Я думал, что это могут быть табуляции, но они, насколько я мог судить, не вызвали никаких проблем. Я также пошел на сайт, открыл консоль разработчика и добавил тег <img> напрямую с этим URI, и он не вызвал жалоб, так что мне не удалось воспроизвести проблему, однако мы по-прежнему получаем логи (275 за последние 2 часа).

Существуют ли какие-то особые обстоятельства, при которых изображение будет заблокировано, несмотря на то, что оно разрешено в политике? Могу ли я что-то добавить, чтобы обработать этот случай? Браузер пользователя – Chrome 129 на Windows 10.


Ответ или решение

Причины ошибки Content Security Policy (CSP) несмотря на включение blocked-uri в original-policy

Content Security Policy (CSP) — это мощный инструмент для повышения безопасности веб-приложений, который позволяет веб-разработчикам определять, какие ресурсы могут загружаться на их страницах. В вашем случае вы столкнулись с ошибкой, связанной с блокировкой изображения (image) для трекера Facebook, несмотря на наличие https://www.facebook.com в директиве img-src вашей CSP. Давайте разберем ситуацию более детально и рассмотрим возможные причины и решения этой проблемы.

1. Динамическое создание контента

Одна из возможных причин возникновения ошибки заключается в том, что ошибка может возникать не из-за статического контента, указанного в CSP, а из-за динамически генерируемого контента. Если сторонние скрипты или трекеры пытаются загрузить ресурсы с URL, который интерпретируется как “потенциально недопустимый” (например, с использованием разных поддоменов или параметров URL), это может привести к блокировке, несмотря на то, что основной домен указан в CSP.

2. Различные поддомены

Хотя https://www.facebook.com указан в вашей политике, стоит проверить, правильно ли обрабатываются URL-адреса с учетом поддоменов и протоколов. Убедитесь, что все возможные поддомены находятся в списке, и уточните форматирование директивы в оригинальной политике.

3. Специальные параметры и значения в URL

Если URL, который вызывает ошибку, содержит специальные параметры (например, &, ?, #, и т.д.), это может привести к тому, что браузер не сможет корректно сопоставить его с правилами CSP. Убедитесь, что правила CSP обрабатывают все возможные случаи, и проверьте логи на наличие других URL, которые могут быть связаны с этой ошибкой.

4. Тестирование в различных условиях

Несмотря на успешный тест с вставленной меткой в консоль разработчика, полезно протестировать ситуацию в реальных сценариях, используя разные браузеры и версии, так как некоторые версии могут обрабатывать CSP по-разному. Например, Chrome 129 может иметь свои нюансы обработки CSP, которые стоит проверить.

5. Политика отчета (CSP Report-Only)

Так как вы используете заголовок Content-Security-Policy-Report-Only, это означает, что политика не будет останавливать загрузку ресурсов, а просто отправит отчеты о нарушениях. Это позволяет вам наблюдать за проблемами, которые могут возникнуть. Однако не следует игнорировать эти предупреждения, так как они могут указывать на потенциальные проблемы с безопасностью.

Рекомендации по улучшению

  1. Уточните директиву CSP. Попробуйте явным образом добавить адреса всех поддоменов и связанных URL.

  2. Анализируйте и адаптируйте параметры. Проверьте параметры URL, которые могли быть обрезаны или неправильно интерпретированы.

  3. Обсудите с разработчиками Facebook. Возможно, проблема связана с особенностями их трекингового механизма, и стоит проконсультироваться с документацией Facebook по их API и политикам безопасности.

  4. Логи и мониторинг. Продолжайте мониторить логи CSP и используйте их для дальнейшей диагностики проблем с загрузкой.

Заключение

Ошибки CSP могут быть сложными и многогранными. Важно систематически подойти к анализу проблемы, проверяя все возможные факторы, включая динамическое создание контента, настройки поддоменов и параметры URL. Следуя рекомендациям, вы сможете минимизировать шансы возникновения подобных ошибок в будущем и улучшить безопасность вашего веб-приложения.

Оцените материал
Добавить комментарий

Капча загружается...