Как добавить Report-To Content-Security-Policy непосредственно в web.config - PullRequest
2 голосов
/ 11 марта 2020

Я пытаюсь реализовать report-uri и report-to в приложении переднего плана.

report-uri :

Я выполнил задачу по расширению текущего Content-Security-Policy значения заголовка с report-uri, и это работает:

<add name="Content-Security-Policy" value="default-src 'self' 'unsafe-inline' data: google.com; report-uri http://localhost:51260/api/csp/report;"/>

отчет на :

Следуя инструкциям, я понял, что мне нужно добавить две вещи: новый заголовок Report-To и новую инструкцию в Content-Security-Policy, поэтому я Вы избежали строки json для отчета и добавили их web.config:

<add name="Report-to" value="{&quot;endpoints&quot;:[{&quot;url&quot;:&quot;https://localhost:51260/api/csp/report-to&quot;}],&quot;include_subdomains&quot;:true,&quot;group&quot;:&quot;csp-endpoint&quot;,&quot;max_age&quot;:31536000}" />          
<add name="Content-Security-Policy" value="default-src 'self' 'unsafe-inline' data: google.com; report-uri http://localhost:51260/api/csp/report; report-to csp-endpoint;"/>

, но это не работает.

Неэкранированное значение:

{"endpoints":[{"url":"https://localhost:51260/api/csp/report-to"}],"include_subdomains":true,"group":"csp-endpoint","max_age":31536000}

Для справки:

  1. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri
  2. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-to

1 Ответ

0 голосов
/ 30 апреля 2020

Существует три версии CSP (https://content-security-policy.com). За исключением Inte rnet Explorer, все современные браузеры поддерживают как минимум версию 2. Браузеры, которые реализуют только до версии 2 (Firefox и Safari - примеры), используют report-uri. Браузеры, поддерживающие уровень 3 (например, Chrome), используют функцию report-to. Если браузер поддерживает уровень 3, он будет использовать report-to и игнорировать report-uri. Если браузер поддерживает только уровень 2, report-to, вероятно, вызовет предупреждение в консоли (Firefox отображает предупреждение «Политика безопасности содержимого: не удалось обработать неизвестную директиву report-to»), но не вызовет ошибка.

Имея это в виду, вы должны в настоящее время включить и report-uri, и report-to и позволить браузеру разобраться в этом.

Начиная с уровня 3, отчетность реализуется с помощью API отчетности ( https://w3c.github.io/reporting). В настоящее время это черновик, поэтому браузеры могут реализовать его по-другому. Старое объяснение того, как Chrome реализует этот API, можно найти здесь: https://developers.google.com/web/updates/2018/09/reportingapi (я не смог найти более новую версию, и некоторые примеры больше не работают, потому что Chrome был изменен с момента написания этого документа). Одна особенная информация из этого документа была очень полезной: «Отчеты доставляются из вашего приложения вне диапазона, то есть браузер контролирует отправку отчетов на ваши серверы». На уровне 2 CSP отчеты отправляются немедленно, а на уровне 3 CSP отчеты отправляются на усмотрение браузера. Это означает, что вы можете не сразу увидеть отчет. Когда я впервые внедрил CSP, я попытался проверить и предположил, что отчет будет отправлен немедленно. Поэтому, когда я использовал Firefox, я видел отчет, а когда я использовал Chrome, я этого не делал (мне приходилось ждать в среднем 30 - 60 секунд).

В качестве инструмента тестирования в chrome Вы можете go до chrome: / /net -экспорт и https://netlog-viewer.appspot.com для отслеживания отчетов. Go до net -экспорт и выберите «Начать запись на диск» (я просто оставляю параметры по умолчанию). Выберите место для сохранения файла журнала. Затем go на ваш веб-сайт, который должен отправить отчет в случае нарушения CSP. После того, как вы это сделали (и проверили консоль, чтобы убедиться в нарушении), go back и net -export и выберите «Stop Logging». На этом этапе вы можете просмотреть содержимое файла журнала, перейдя по второй предоставленной мной ссылке (netlog-viewer). Откройте файл, и тогда у вас будет много вариантов в меню слева. Тебя интересует «Отчетность». В правой части экрана вы увидите «Отчеты в очереди». Предполагая, что отчет еще не был отправлен, вы увидите здесь нарушение csp (если отчет уже был отправлен, вы не будете).

Я сказал все это, чтобы сказать это, я полагаю, что ваш Код в порядке. Я использовал его на одном из своих сайтов, и он работал (я изменил URL конечной точки, но все остальное было таким же). Я считаю, что ваша проблема пытается получить отчет при использовании localhost. Я не смог найти никакой документации, чтобы подтвердить это утверждение (если кто-то еще, пожалуйста, добавьте комментарий), но я также не смог получить отчет при использовании localhost. Я подумал, что это может быть проблема с сертификатом безопасности (на основании этой статьи API отчетов доступен только в безопасном контексте: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts/features_restricted_to_secure_contexts), но я настроил локальный хост для использования https, а отчет все еще не был послал. Я вижу отчет в инструменте отчетности Chrome, но он никогда не отправляется.

Надеюсь, это поможет и что кто-то еще может добавить к этому ответу.

...