integrity атрибут HTML
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с апреля 2018 года.
Атрибут integrity позволяет разработчику указать, что связанный скрипт или таблица стилей должны иметь определённое содержимое. Браузер проверит, действительно ли ресурс содержит это содержимое, и откажется загружать его, если это не так.
Это защита от атаки на цепочку поставок, при которой злоумышленник получает доступ к домену, с которого загружается скрипт или таблица стилей, и подменяет ожидаемый ресурс вредоносным.
Описание
Атрибут можно применять только к элементам <script> или <link>.
Атрибут состоит из одного или нескольких компонентов, каждый из которых включает:
- Идентификатор криптографической хеш-функции. Поддерживаются три хеш-функции. В порядке возрастания надёжности это SHA-256, SHA-384 и SHA-512.
- Результат хеширования содержимого ресурса с помощью указанной хеш-функции.
Когда браузер загружает ресурс с установленным атрибутом integrity, он сначала выберет набор хешей, вычисленных с помощью самой надёжной из присутствующих хеш-функций. То есть, если атрибут содержит значения, вычисленные с помощью SHA-256 и SHA-384, браузер будет использовать только хеши, вычисленные с помощью SHA-384.
Затем браузер вычислит хеш содержимого ресурса с помощью указанной функции и сравнит результат со всеми заданными значениями: если фактическое значение совпадёт с любым из заданных, браузер загрузит ресурс, иначе откажется от его загрузки.
Подробнее см. в нашем руководстве по целостности подресурсов.
Значения
Значение этого атрибута представляет собой разделённый пробелами список компонентов, каждый из которых имеет одну из следующих форм:
sha256-HASH_VALUEsha384-HASH_VALUEsha512-HASH_VALUE
В каждом случае часть перед - указывает используемую хеш-функцию, а HASH_VALUE — это результат хеширования ресурса указанной хеш-функцией, закодированный в формате base64.
Примеры
>Использование разных хеш-функций
Следующий элемент <script> содержит атрибут integrity с тремя значениями: одно вычислено с помощью SHA-256, одно — с помощью SHA-384 и одно — с помощью SHA-512.
Браузер выберет значение, вычисленное с помощью самого надёжного алгоритма, который он поддерживает. Поскольку все современные браузеры поддерживают SHA-512, это означает, что браузер выберет значение sha512-. Он вычислит хеш содержимого файла с помощью SHA-512 и сравнит результат со значением sha512-, а файл загрузит, только если значения совпадут.
В этом случае наличие нескольких значений позволяет веб-сайту работать с браузерами, которые могут поддерживать не все хеш-функции.
<script src="https://cdn.example.com/script.js" integrity=" sha256-NmUxNTFiMDUzZGIwZjcwZDIyYTc5NTA4ZmQyNT sha384-Tk2Yjg3YmYzMWNkZTdhMTFkM2FlNDg4ZjE3MzEzNTk3ZDlh sha512-OGUwYThkZDc2YzFlZGI5MDEzZmZhMGFkMGQ0OTQ3MzZkNGYZTEzODk2" crossorigin="anonymous"></script>
Обратите внимание: в этом и последующих примерах мы для краткости сократили примеры значений хеша.
Использование разных значений хеша
Следующий элемент <script> содержит атрибут integrity с двумя разными значениями, вычисленными с помощью алгоритма SHA-512. Эти разные значения соответствуют альтернативным вариантам содержимого связанного файла.
Если хеш SHA-512 связанного файла совпадает с любым из заданных значений, браузер загрузит файл.
Это позволяет серверу по адресу cdn.example.com возвращать одну из двух версий файла.
<script src="https://cdn.example.com/script.js" integrity=" sha512-ZmQ5NjNiYWJjYTM3MjRhMGI4MTQzNWRmZTZkZGYyMzQyOGYYTZkYjBm sha512-OGUwYThkZDc2YzFlZGI5MDEzZmZhMGFkMGQ0OTQ3MzZkNGYZTEzODk2" crossorigin="anonymous"></script>
Использование integrity в элементах <link>
Следующий элемент <link> загружает таблицу стилей и содержит атрибут integrity с шестью значениями: они отражают два возможных варианта содержимого связанного файла, каждый из которых вычислен с помощью трёх разных хеш-функций.
Браузер выберет набор значений, вычисленных с помощью самой надёжной из поддерживаемых им хеш-функций: в современных браузерах это будут два значения sha512-.
Затем он вычислит хеш загруженного файла с помощью SHA-512 и сравнит результат с обоими значениями sha512-: если совпадёт хотя бы одно из них, браузер загрузит ресурс.
<link rel="stylesheet" href="https://cdn.example.com/style.css" integrity=" sha256-NmUxNTFiMDUzZGIwZjcwZDIyYTc5NTA4ZmQyNT sha256-OTcyMGZkY2Y3NGZhZjUwNWU5NGQ0ZWJhYWVhND sha384-Tk2Yjg3YmYzMWNkZTdhMTFkM2FlNDg4ZjE3MzEzNTk3ZDlh sha384-ZTdhYjQ2NTE5OTg0Yjc2ZDU2MDMxMDUxY2Y5NDMxYzI5NjA sha512-OGUwYThkZDc2YzFlZGI5MDEzZmZhMGFkMGQ0OTQ3MzZkNGYZTEzODk2 sha512-IxZTcwZjE2ZjU3MzE4NWM5ODU4ZmJkYjBlYzBhYzFkYzU0OGJmM2ZkN" crossorigin="anonymous" />
Спецификации
| Спецификация |
|---|
| HTML> # attr-link-integrity> |
| HTML> # attr-script-integrity> |
| Целостность подресурсов> # the-integrity-attribute> |
Совместимость с браузерами
>html.elements.link.integrity
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
integrity |
45 | 17 | 43 | 32 | 11.1 | 45 | 43 | 32 | 11.3 | 5.0 | 45 | 11.3 |
html.elements.script.integrity
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
integrity |
45 | 17 | 43 | 32 | 11.1 | 45 | 43 | 32 | 11.3 | 5.0 | 45 | 11.3 |
ed25519_public_key |
141 | 141 | Нет | 125 | Нет | 141 | Нет | 93 | Нет | Нет | 141 | Нет |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/integrity