Внутри политики выбирается применимая директива и её запасной вариант. Между отдельными блокирующими политиками такого выбора нет: каждая сохраняет своё ограничение.
Почему это важно
Одна разрешающая запись не управляет всеми контекстами 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
World Wide Web Consortium · W3C Working Draft, 13 August 2026
Прочитана сохранённая локальная HTML-копия. Алгоритмы разделов 6–7 отделены от ненормативных примеров раздела 8; редакция проекта не означает проверку поддержки каждого браузера.
Открыть первоисточникContent Security Policy Level 3
World Wide Web Consortium · W3C Working Draft, 5 May 2026
Определяет CSP directives, source lists, nonce-source и browser enforcement для загрузки и исполнения content.
Открыть первоисточникCross Site Scripting Prevention Cheat Sheet
OWASP Foundation · OWASP Cheat Sheet Series, checked 30 August 2026
Определяет context-specific output encoding и safe sinks; CSP и WAF рассматривает как дополнительные, а не основные XSS controls.
Открыть первоисточник