SRI

SRI (Subresource Integrity, W3C) — атрибут integrity у <script>/<link>, гарантирующий что подгруженный ресурс имеет ожидаемый хеш. Защита от компрометации CDN.

Пример

<script src="https://cdn.example.com/jquery-3.7.1.min.js"
        integrity="sha384-1H217gwSVyLSIfaLxHbE7dRb3v4mYCKbpQvzx0cegeju1MVsGrX5xXxAvs/HgeFs"
        crossorigin="anonymous"></script>

Браузер грузит файл, считает SHA-384, сравнивает. Не совпало → ошибка, скрипт не выполняется.

Алгоритмы

SHA-256, SHA-384, SHA-512. Можно несколько через пробел — браузер выбирает сильнейший.

crossorigin

SRI требует CORS для cross-origin ресурсов. Иначе браузер не может прочитать содержимое для проверки. Атрибут crossorigin="anonymous" обязателен.

Как посчитать

curl -s https://cdn.example.com/jquery.min.js | \
  openssl dgst -sha384 -binary | \
  openssl base64 -A

# или онлайн
https://www.srihash.org/

Плюсы и минусы

ПлюсыМинусы
защита от CDN-компроматаобновление CDN → обновление integrity
защита от MITM (частично)только статические ресурсы
не мешает кешуне работает с динамикой

Комбо с CSP

Content-Security-Policy: require-sri-for script style

Обязать все скрипты иметь integrity. Директива работает в Firefox.

Знаменитые взломы CDN

SRI бы спас во всех случаях.

См. также