Внутри политики выбирается применимая директива и её запасной вариант. Между отдельными блокирующими политиками такого выбора нет: каждая сохраняет своё ограничение.
Директивы CSP для скриптов
Определение
Директивы CSP для скриптов — правила политики, которые разделяют проверку JavaScript по способу выполнения кода. За элементы script отвечает script-src-elem, за обработчики событий в атрибутах — script-src-attr, а при их отсутствии проверка переходит к script-src и затем к default-src.
Также ищут: CSP script directives · script-src-elem · script-src-attr
Зачем это знать
Одна разрешающая запись не управляет всеми контекстами JavaScript. Для диагностики отказа нужно сначала назвать вид операции и эффективную директиву, а затем проверять её список.
Карта понятия
Что подтверждено
script-src-elem применяется к запросам скриптов и встроенным блокам script; обработчики событий в атрибутах регулирует script-src-attr. Разрешение элемента script не становится разрешением любого обработчика события.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.1.11–6.1.12. Классы проверок в модели документа; речь не о безопасном превращении произвольного атрибута в исполняемый код.
При отсутствии специальной директивы проверки script-src-elem и script-src-attr переходят к script-src, а затем к default-src. Выбирается первая подходящая присутствующая директива, а не объединение разрешений всех трёх списков.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.8.3–6.8.4. Выбор внутри одной политики; несколько отдельных политик проверяются независимо.
Если присутствует script-src-attr, она заменяет script-src для проверки обработчиков событий. Поэтому запрет обработчиков в специальной директиве не смягчается общим unsafe-inline в script-src той же политики.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.1.12, 6.7.3 и 6.8.3. Условие — отдельная применимая директива для атрибутов; не сравнение разных независимо действующих политик.
Значение script-src-elem не используется для проверок исполнения строк, связанных с unsafe-eval, и не является запасной директивой для worker-src. Разрешение обычного элемента script само не подтверждает разрешение этих других способов выполнения.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.1.11. Граница специальной директивы; полный набор правил рабочих потоков и исполнения строк здесь не перечисляется.
Если специальная директива присутствует и её список не разрешает операцию, это не считается отсутствием директивы. Алгоритм не переходит к более широкому запасному списку только потому, что специальная проверка дала отказ.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.8.3–6.8.4. Различие отсутствующей директивы и присутствующего запрета; названная директива предполагается корректно разобранной.
Не путать
Выбор директивы отвечает за допуск исполнения, а кодирование — за представление данных в конкретном контексте. Разрешить обработчик события не означает сделать его безопасным местом для непроверенной строки.
Что проверить
- Назовите вид операции: элемент скрипта, обработчик или другой механизм.
- Найдите специальную директиву для этого вида.
- Используйте запасную только при отсутствии специальной.
- Не объединяйте разрешения директив внутри одной политики.
- Не путайте присутствующий запрет с отсутствием правила.
- Проверяйте исполнение строк и рабочие потоки отдельно.
- Учитывайте каждую независимо блокирующую политику.
Первоисточники
- Content Security Policy Level 3
Определяет CSP directives, source lists, nonce-source и browser enforcement для загрузки и исполнения content.
- Cross Site Scripting Prevention Cheat Sheet
Определяет context-specific output encoding и safe sinks; CSP и WAF рассматривает как дополнительные, а не основные XSS controls.