Хеш сопоставляет подготовленное содержимое, nonce — выданное элементу значение. Строковое совпадение nonce и нормализация представления хеша имеют разные правила.
Почему это важно
Так можно разрешить подготовленный код без общего разрешения любого встроенного скрипта. При этом хеш не выбирает безопасную программу за разработчика и не определяет намерение пользователя.
Что подтверждено
Грамматика hash-source в CSP 3 допускает SHA-256, SHA-384 и SHA-512: имя алгоритма и закодированное значение хеша заключаются в одинарные кавычки. Совпадение с разрешённым хешем — один из путей допуска кода политикой.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 2.3.1 и 6.7.3.3. Не утверждает поддержку каждой редакции проекта любым браузером.
Для встроенного скрипта хеш вычисляется по тексту программы, переданному алгоритму сопоставления, после преобразования строки и кодирования UTF-8. Это не хеш всей HTML-страницы или окружающих тегов; пробелы и переводы строк внутри текста нельзя произвольно отбросить.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.3.3. Проверяется текст встроенного скрипта после обработки HTML, а не исходные байты всего сетевого ответа.
При сопоставлении хеша встроенного кода алгоритм CSP заменяет символ «-» на «+», а «_» на «/» в разрешённом значении хеша. Для nonce правило другое: сравнивается сама строка, без декодирования её в скрытое значение.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 2.3.1 и 6.7.3.3. Нормализация кодировки хеша не является общим правилом нормализации всех значений политики.
Если эффективный список источников содержит nonce-source или hash-source, запись unsafe-inline в этом списке не разрешает весь встроенный код. Отдельный элемент всё ещё может пройти проверку подходящего nonce или хеша.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.3.2–6.7.3.3. Наличие хеша не означает запрет любого встроенного кода и не переносится на другой независимый список директивы.
Совпадение с разрешённым хешем отвечает на вопрос о допуске данного кода политикой. Оно не проверяет, безопасна ли программа, не очищает недоверенный HTML и не исправляет неправильный контекст вывода данных.
Граница применимости: Сопоставление алгоритма CSP 3 от 13 августа 2026 года с принятой рекомендацией OWASP по защите от XSS; решение о доверии разрешаемому коду остаётся отдельным.
Не путать
Хеш CSP разрешает исполнение подходящего кода. Контекстное кодирование решает другую задачу: безопасно поместить данные в подходящий контекст вывода.
Что проверить
- Зафиксируйте редакцию CSP и эффективную директиву.
- Выберите допустимый алгоритм хеша.
- Хешируйте именно текст встроенного кода в требуемом представлении.
- Сохраняйте значимые пробелы и переводы строк.
- После изменения программы пересчитайте разрешённый хеш.
- Учитывайте взаимодействие с unsafe-inline.
- Проверяйте сам код и точки вывода отдельно от совпадения хеша.
Первоисточники
Content Security Policy Level 3
World Wide Web Consortium · W3C Working Draft, 13 August 2026
Прочитана сохранённая локальная HTML-копия. Алгоритмы разделов 6–7 отделены от ненормативных примеров раздела 8; редакция проекта не означает проверку поддержки каждого браузера.
Открыть первоисточник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.
Открыть первоисточникContent Security Policy Level 3
World Wide Web Consortium · W3C Working Draft, 5 May 2026
Определяет CSP directives, source lists, nonce-source и browser enforcement для загрузки и исполнения content.
Открыть первоисточник