Перейти к содержанию

Использование Subresource Integrity (SRI) для проверки целостности внешних ресурсов

Описание

Это требование подразумевает, что если активы приложения (например, JavaScript, CSS или изображения) размещаются на внешних CDN (Content Delivery Network) или других внешних провайдерах, необходимо использовать механизм Subresource Integrity (SRI) для проверки целостности этих ресурсов. SRI позволяет браузерам проверять, что загружаемые ресурсы не были изменены, путем проверки их контрольной суммы.

Почему это важно

  1. Безопасность: SRI защищает от атак, связанных с подменой ресурсов, таких как атаки типа "человек посередине" (MITM), когда злоумышленник может попытаться изменить загружаемые файлы.
  2. Целостность данных: Использование SRI гарантирует, что загружаемые ресурсы соответствуют ожидаемым версиям, что помогает предотвратить внедрение вредоносного кода.
  3. Доверие пользователей: Пользователи могут быть уверены, что ресурсы, загружаемые из внешних источников, не были изменены и безопасны для использования.
  4. Соответствие стандартам: Многие стандарты безопасности и лучшие практики рекомендуют использование SRI для защиты внешних ресурсов.

Способы реализации с примерами

Добавление атрибута integrity к тегам <script> и <link>: При подключении внешних ресурсов добавьте атрибут integrity, который содержит контрольную сумму ресурса.

Пример (подключение JavaScript с использованием SRI):

<script src="https://cdn.example.com/library.js"
        integrity="sha384-oqVuAfXRKap7fdgcCY5cnvZ8y7f5g5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e"
        crossorigin="anonymous"></script>

Пример (подключение CSS с использованием SRI):

<link rel="stylesheet" href="https://cdn.example.com/styles.css"
      integrity="sha384-oqVuAfXRKap7fdgcCY5cnvZ8y7f5g5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e"
      crossorigin="anonymous">

Генерация контрольных сумм: Используйте инструменты для генерации контрольных сумм для ваших ресурсов. Это можно сделать с помощью командной строки или онлайн-сервисов.

Пример (генерация контрольной суммы с помощью OpenSSL):

# Генерация SHA-384 контрольной суммы
openssl dgst -sha384 -binary library.js | openssl base64 -A

Примеры уязвимого кода

<!-- Пример уязвимого кода на HTML -->
<script src="https://cdn.example.com/library.js"></script>  <!-- Уязвимость: отсутствие SRI -->

Проблема: Отсутствие SRI может привести к тому, что злоумышленник сможет подменить загружаемый ресурс, что может привести к выполнению вредоносного кода.

Причины, к которым может привести несоблюдение требования

  1. Уязвимость к атакам: Без SRI ресурсы могут быть подменены, что увеличивает риск внедрения вредоносного кода.
  2. Потеря доверия: Успешные атаки на ресурсы могут подорвать доверие пользователей к вашему приложению.
  3. Проблемы с соответствием: Несоблюдение стандартов безопасности может привести к юридическим последствиям и штрафам.

Рекомендации

  • Всегда используйте SRI для проверки целостности внешних ресурсов, загружаемых из CDN или других источников.
  • Регулярно проверяйте и обновляйте контрольные суммы для внешних ресурсов при их изменении.
  • Обучите команду разработчиков важности использования SRI для повышения безопасности приложения.
  • Проводите аудит кода на предмет отсутствия SRI для внешних ресурсов.