Nonce может допустить исходный загрузчик. strict-dynamic меняет последующий допуск программно создаваемых зависимостей, поэтому проверка одного значения nonce не оценивает адреса, которые выберет код.
Почему это важно
Политика переносит существенную часть решения на код загрузчика. Если недоверенные данные управляют адресом создаваемого им скрипта, один правильно выданный nonce не обеспечивает безопасную загрузку.
Что подтверждено
При strict-dynamic скрипт, допущенный по nonce или хешу, может загружать зависимости через программно созданные элементы script, не вставленные HTML-парсером. Для таких запросов не требуется перечислять каждый узел зависимости в списке политики.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.1.1 и пояснение 8.2. Рассматривается допускающая этот механизм эффективная директива скриптов; отдельные блокирующие политики применяются независимо.
При strict-dynamic в списке для загрузки скриптов записи узлов, схем, self и unsafe-inline не дают прежнего допуска. Nonce и хеши продолжают учитываться; присутствующий рядом адрес CDN не является дополнительным ограничением программно создаваемых загрузок этой ветви.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.1.1, 6.7.3.2 и пояснение 8.2. Не распространяет действие strict-dynamic на изображения, стили или произвольные другие ресурсы.
В примере CSP 3 элемент script, созданный через document.createElement и добавленный в документ, не считается вставленным парсером. Элемент, созданный через document.write, считается вставленным парсером: одна динамическая генерация текста HTML не даёт ему того же допуска strict-dynamic.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.1.1 и пример 8.2. Сравниваются указанные способы вставки без подходящего собственного nonce, хеша или иного независимого допуска.
Если злоумышленник управляет адресом скрипта, который разрешённый загрузчик создаёт вне HTML-парсера, strict-dynamic допускает загрузку по такому адресу. Поэтому источник адресов зависимостей и места программного создания скриптов требуют отдельной проверки.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, предупреждение 8.2. Условие — управление адресом программно создаваемого скрипта; правило не утверждает возможность такого управления в любом приложении.
Для запроса скрипта, вставленного парсером, ветка strict-dynamic возвращает запрет, если до неё не прошла проверка nonce или подходящих данных целостности. Один адрес узла в том же списке не спасает такой запрос.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.1.1. Речь о результате этой директивы в модели CSP 3 и о запросе без указанного предварительного допуска, а не о любых способах запуска программы.
Не путать
strict-dynamic регулирует исполнение и загрузку скриптов браузером. Список исходящих адресов сервера относится к другому участнику и не возникает из браузерной политики.
Что проверить
- Укажите эффективную директиву и поддержку модели CSP 3.
- Назовите исходный скрипт, допущенный по nonce или хешу.
- Проследите программное создание зависимостей.
- Различайте создание элемента и вставку через document.write.
- Не считайте адрес CDN действующим ограничением этой ветви.
- Проверьте, кто управляет адресами зависимостей.
- Учитывайте остальные блокирующие политики и ограничения загрузки.
Первоисточники
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.
Открыть первоисточникServer Side Request Forgery Prevention Cheat Sheet
OWASP Foundation · OWASP Cheat Sheet Series, checked 30 August 2026
Описывает SSRF, allowlist destinations, IP/domain validation, DNS risks и запрет автоматических redirects.
Открыть первоисточник