Які ознаки цілісності та кросоригінальності?


362

Bootstrapcdn нещодавно змінив свої посилання. Зараз це виглядає приблизно так:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" 
rel="stylesheet" 
integrity="sha256-MfvZlkHCEqatNoGiOXveE8FIwMzZg4W85qfrfIFBfYc= sha512-dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDjLXDmezHubeNikyKGVyQ==" 
crossorigin="anonymous">

Що означають integrityта crossoriginатрибути? Як вони впливають на завантаження таблиці стилів?

Відповіді:


237

Обидва атрибути були додані до Bootstrap CDN для реалізації Цілісності субресурсів .

Subresource цілісність визначає механізм , з допомогою якого агенти користувачів можуть перевірити , що витягується ресурс був доставлений без несподіваною маніпуляції Reference

Атрибут цілісності - це дозволяє браузеру перевіряти джерело файлів, щоб переконатися, що код ніколи не завантажується, якщо джерелом було маніпульовано.

Атрибут Crossorigin присутній, коли запит завантажується за допомогою "CORS", що тепер є вимогою перевірки SRI, коли не завантажується з "того самого походження". Більше інформації про crossorigin

Більш детально про реалізацію CDN з Bootstrap


2
Щойно використав w3c html validator і отримав це повідомлення при використанні атрибута "цілісність":Attribute integrity not allowed on element link at this point.
Томаш Гонсалес

9
@TomasGonzalez Я думаю, ви можете з упевненістю припустити, що інструмент w3c ще не оновлений, щоб включити підтримку SRI
Josh_at_Savings_Champion

5
FYI: Подана помилка і з валідатором: github.com/validator/validator/issues/151
jonathanKingston

72
Тут підтримується W3C HTML Checker (ака-валідатор). Так, вибачте, шашка ще нічого не знає про integrityатрибут. Але я скоро додаватиму підтримку, як вимагають у github.com/validator/validator/isissue/151 . Тому ви, можливо, захочете підписатися на це питання, щоб отримати сповіщення, коли воно приземляється.
sidehowbarker

7
OnlineWebCheck.com підтримує integrityатрибут (я підтримую цю перевірку).
Альберт Вірш

112

цілісність - визначає хеш-значення ресурсу (наприклад, контрольної суми), яке має відповідати, щоб браузер його виконав. Хеш гарантує, що файл був модифікований і містить очікувані дані. Таким чином браузер не завантажує різні (наприклад, шкідливі) ресурси. Уявіть ситуацію, коли ваші JavaScript-файли були зламані на CDN, і це не було можливості знати. Атрибут цілісності запобігає завантаженню вмісту, який не відповідає.

Недійсні SRI будуть заблоковані (інструменти для розробників Chrome), незалежно від перехресного походження. Нижче випадку NON-CORS, коли атрибут цілісності не відповідає:

введіть тут опис зображення

Цілісність можна обчислити за допомогою: https://www.srihash.org/ Або набравши в консоль ( посилання ):

openssl dgst -sha384 -binary FILENAME.js | openssl base64 -A

crossorigin - визначає параметри, які використовуються при завантаженні ресурсу з сервера іншого походження. (Див. CORS (Cross-Origin Resource Sharing) тут: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS ). Це ефективно змінює HTTP-запити, що надсилаються браузером. Якщо доданий атрибут "crossorigin" - це призведе до додавання початкового коду : <ORIGIN> пара ключа-значення в HTTP-запит, як показано нижче.

введіть тут опис зображення

crossorigin може бути встановлений як "анонімний", так і "обліковий запис використання". І те й інше призведе до додавання походження: у запит. Останнє, однак, забезпечить перевірку облікових даних. Жоден атрибут crossorigin у тезі не призведе до надсилання запиту без походження: пара ключ-значення.

Ось випадок, коли ви вимагаєте від CDN "використовувати облікові дані":

<script 
        src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"
        integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" 
        crossorigin="use-credentials"></script>

Веб-переглядач може скасувати запит, якщо crossorigin неправильно встановлений.

введіть тут опис зображення

Посилання
- https://www.w3.org/TR/cors/
- https://tools.ietf.org/html/rfc6454
- https://developer.mozilla.org/en-US/docs/Web/HTML / Елемент / посилання

Блоги
- https://frederik-braun.com/using-subresource-integrity.html
- https://web-security.guru/en/web-security/subresource-integrity


6
Дуже корисна відповідь!
Еміель Конінг

4
Дякую за вашу відповідь. Я люблю технічні деталі!
Ань Тран

Як ми можемо визначити, чи цілісність файлу є тією, яка ще не маніпулюється? Будь-яка порада?
vadi taslim

@ yon.fun: не рекомендуйте редагувати, щоб додавати власні посилання. Ми тут дуже чутливі до можливого спаму, навіть якщо ваш вміст є цінним.
півзахисник

1

Технічно атрибут Цілісності допомагає саме в цьому - він дозволяє правильно перевірити джерело даних. Тобто, він просто дозволяє браузеру перевіряти номери у правому вихідному файлі на суму, яку вимагає вихідний файл, розташований на сервері CDN.

Заглиблюючись трохи глибше, у випадку встановленого зашифрованого хеш-значення цього джерела та його перевіреної відповідності заздалегідь заданому значенню в браузері - код виконується, і запит користувача успішно обробляється.

Атрибут Crossorigin допомагає розробникам оптимізувати показники продуктивності CDN, одночасно захищаючи код веб-сайту від шкідливих сценаріїв.

Зокрема, Crossorigin завантажує програмний код сайту в анонімному режимі, не завантажуючи файли cookie та не виконуючи процедуру аутентифікації. Таким чином, він запобігає витоку даних користувачів під час першого завантаження сайту на певний сервер CDN, який мережеві шахраї можуть легко замінити адреси.

Джерело: https://yon.fun/what-is-link-integrity-and-crossorigin/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.