Как пользоваться
- Наберите директивы в поле Политика, по одной в строке, с именами, написанными точно, например script-src.
- Выберите Режим: Content-Security-Policy включает политику, а Content-Security-Policy-Report-Only — заголовок, которым её сначала проверяют.
- Прочитайте Действующее правило по ресурсам, чтобы увидеть, какая директива покрывает скрипты, стили, изображения и фреймы.
- Скопируйте Строка заголовка на сервер и исправьте каждое предупреждение, которое указано под результатом.
Какое правило действует для ресурса
Браузер проверяет каждый вид ресурса по одной директиве. Если её нет, он переходит по цепочке к запасным директивам, и таблица показывает пройденную цепочку. Цепочки взяты из CSP Level 3, раздел 6.8.3.
- Скрипты: script-src-elem, затем script-src, затем default-src.
- Встроенные обработчики событий: script-src-attr, затем script-src, затем default-src.
- Таблицы стилей: style-src-elem, затем style-src, затем default-src. Встроенные атрибуты style следуют той же схеме с style-src-attr.
- Фреймы: frame-src, затем child-src, затем default-src.
- Воркеры: worker-src, затем child-src, затем script-src, затем default-src.
- Изображения, шрифты, медиа, объекты, манифесты и запросы fetch: их собственная директива, затем default-src.
Что читает проверка
Директивы разделяются точкой с запятой, а инструмент принимает и переносы строк. Имя читается до первого пробела и не чувствительно к регистру. Если директива встречается дважды, учитывается первая, а повтор пропускается (CSP Level 3, раздел 2.2.1).
- Ключевые слова, такие как 'self' и 'none', пишутся в одинарных кавычках. 'none' должен стоять в своём списке отдельно.
- Nonce — это 'nonce-' и значение в base64. Хеш — это sha256, sha384 или sha512, дефис и значение в base64 (раздел 2.3.1).
- Запятая не допускается внутри значения директивы, потому что в заголовке она разделяет политики.
Чего проверка не делает
- Она не открывает страницу и не проверяет политику в браузере. Таблица показывает правило, которое использовал бы браузер, а не то, будет ли ваша страница работать.
- Она проверяет написание ключевых слов, nonce и хешей, но подробно не проверяет источники в виде узлов и схем.
- Она не оценивает директивы, которых нет в её списке, например sandbox. Они остаются в строке заголовка без изменений.
Разбор примера: образец политики
В образце политики скрипты используют script-src, потому что script-src-elem отсутствует. У фреймов нет frame-src и child-src, поэтому они переходят к default-src. У воркеров нет worker-src и child-src, поэтому они используют script-src. Директива style-src содержит 'unsafe-inline', и проверка выводит это как одно предупреждение.
| Ресурс | Проверяется по порядку | Правило в действии |
|---|---|---|
| Скрипты (элементы script) | script-src-elem, script-src, default-src | script-src |
| Фреймы (iframe) | frame-src, child-src, default-src | default-src |
| Воркеры | worker-src, child-src, script-src, default-src | script-src |
Частые вопросы
Почему таблица показывает правило для скриптов, которое я не писал?
Ресурс, у которого нет своей директивы, использует ту директиву, к которой переходит. Для скриптов это script-src-elem, затем script-src, затем default-src. Таблица показывает правило, которое использовал бы браузер, поэтому даже без script-src у вас может быть действующее правило.
Что разрешает 'unsafe-inline'?
Он разрешает встроенные скрипты или встроенные стили там, где это покрывает директива. Nonce или хеш в том же списке источников заставляет браузеры игнорировать 'unsafe-inline' (CSP Level 3, раздел 6.7.3.2), поэтому для нужного встроенного кода используйте один из них.
Писать report-uri или report-to?
Используйте report-to. MDN описывает её как директиву, которая заменяет report-uri. Пока report-to поддерживается не везде, MDN советует отправлять обе, а проверка предупреждает, если есть report-uri.
Почему одна из директив отмечена как неизвестная?
Проверка судит только о директивах, которые поставляют браузеры и документирует MDN. Неизвестное имя остаётся в строке заголовка без изменений, но в таблице его нет и оценки ему не дают.
Отправляет ли инструмент мою политику куда-нибудь?
Нет. Заголовок собирается в вашем браузере. Ничего из набранного не отправляется на сервер и не сохраняется, а политика не проверяется ни на одном сайте.
Является ли CSP Level 3 окончательным стандартом?
Пока нет. Текст, которому следует проверка, — рабочий проект W3C от 27 октября 2026 года, документ на пути к рекомендации. Прочитайте последнюю версию, прежде чем полагаться на правило в рабочей политике безопасности.
Источники
- CSP Level 3 (на английском), рабочий проект W3C от 27 октября 2026: разделы 2.2, 2.3.1, 4.4.1, 6.7.3.2 и 6.8.3
- MDN (на английском): заголовок Content-Security-Policy, его директивы и переход к запасным
Цифры и текст в последний раз проверены вторник, 10 ноября 2026 г..