Nonce даёт отдельный путь допуска элемента. Для допуска именно по хешам внешнего скрипта нужны согласованные данные integrity; отсутствие их нельзя восполнить одним ожидаемым хешем в политике.
Хеш внешнего скрипта в CSP
Определение
Хеш внешнего скрипта в CSP — разрешённое политикой значение, с которым браузер сверяет хеши из атрибута integrity у подключаемого сценария. Совпасть должны все распознанные значения, а сами полученные байты файла проверяет механизм целостности ресурса.
Также ищут: CSP external script hash · external JavaScript hash CSP · integrity и CSP
Зачем это знать
Один подходящий хеш среди нескольких ещё не означает допуск по этой ветке CSP. При обновлении метаданных нужно согласовать все распознанные значения и затем проверить сам ресурс.
Карта понятия
Что подтверждено
Ветка допуска внешнего скрипта по хешу CSP сравнивает данные integrity с hash-source политики. Она сама не вычисляет в этом шаге хеш тела ответа: блокировку несовпадающих байтов документ поручает механизму целостности ресурса.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.2.4. Различие допуска метаданных CSP и проверки содержимого Subresource Integrity; полный алгоритм второго механизма здесь не описывается.
Набор распознанных данных integrity должен быть непустым подмножеством разрешённых hash-source: для каждого значения требуется соответствие алгоритма и хеша в политике. Если одно распознанное значение не разрешено, вся эта ветка сопоставления даёт отказ.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.2.4 и пояснение 8.4. Речь только о допуске по хешам: подходящий nonce или иной независимый способ допуска здесь не предполагается.
При отсутствии данных integrity или пустом результате их разбора внешний скрипт не совпадает с политикой именно по ветке хешей. Наличие ожидаемого hash-source в заголовке само не создаёт недостающие метаданные запроса.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.2.4. Это не утверждение, что скрипт не может быть разрешён другой веткой той же директивы.
Нераспознанные данные integrity, включая неподдерживаемый алгоритм или невалидную запись, не участвуют в описанном сравнении с CSP. Но после их отбрасывания должен остаться хотя бы один распознанный и разрешённый хеш: только мусор не образует совпадение.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.2.4 и пояснение 8.4. Не предлагает использовать невалидные данные; поддержка алгоритма рассматривается как условие разбора.
Встроенный код для CSP хешируется после преобразования текста и кодирования UTF-8, а целостность внешнего ресурса проверяется по получаемому ресурсу. Поэтому перенос визуально того же кода из HTML во внешний файл не даёт права автоматически копировать старый хеш без проверки входных байтов.
Граница применимости: Проект CSP Level 3 от 13 августа 2026 года, 6.7.3.3 и пояснение 8.4. Возможное различие входа хеширования, а не обещание, что хеш обязательно изменится при любом переносе.
Не путать
Совпадение метаданных с одной директивой — только один этап. Проверка содержимого ресурса и ограничения других блокирующих политик остаются в силе.
Что проверить
- Укажите, что проверяется именно ветка hash-source.
- Зафиксируйте разобранные данные integrity.
- Убедитесь, что набор распознанных значений не пуст.
- Сопоставьте каждый распознанный хеш с политикой.
- Не учитывайте нераспознанные записи как доказательство целостности.
- Проверьте полученный ресурс отдельным механизмом целостности.
- При переносе встроенного кода сравните точный вход хеширования.
Первоисточники
- Content Security Policy Level 3
Определяет CSP directives, source lists, nonce-source и browser enforcement для загрузки и исполнения content.