Защита веб-приложений

Защита веб-приложений #

Васильев Андрей Михайлович, 2025

Версии презентации


Виды информации #

В рамках веб-приложений приходится работать с разными видами информации:

  • Публичная: описание товаров, статьи и т.д.
  • Конфиденциальная: ФИО пользователей, пароли, банковские данные

Конфиденциальную информацию необходимо защищать:

  • Компании-конкуренты могут использовать эту информацию для борьбы
  • Вредители могут получить доступ к информации
    • Могут воздействовать на клиентов приложения
    • Могут воздействовать на владельцев веб-приложений

Безопасность и конфиденциальность #

Данные концепции являются различными, но сильно связными

  • Безопасность — это процесс защиты личных данных и систем от несанкционированного доступа
  • Конфиденциальность — это предоставление пользователю возможность контролировать как его данные собираются, хранятся, используются и что они не используются безответственно

В приложении необходимо корректно реализовать их вместе

  • Безопасное приложение может предоставлять безопасный доступ к конфиденциальным данным других пользователей
  • Конфиденциальная информация может быть скрыта от обычного пользователя, но доступна для нарушителя, т.к. передаётся по незащищённым каналам связи

Функции безопасности веб-браузера #

Рассмотрим базовые возможности по обеспечению безопасности в веб-браузерах

  • Шифрование канала передачи данных
  • Контроль источника запроса, CORS
  • Контексты безопасности (важно для подключения JavaScript-документов)
  • . . .

Многие вопросы не будут рассмотрены в данной лекции, однако рекомендуется самостоятельно ознакомиться со всеми актуальными угрозами и способами их противодействия

Информацию необходимо защищать как на стороне клиента, так и на стороне сервера

  • Веб-браузеры включают в себя множество средств защиты информации
  • Серверам необходимо корректно настраивать данные средства
  • Серверам необходимо корректно обрабатывать запросы от других клиентов

Шифрование канала передачи данных #

Корректно зашифрованный поток передачи данных обеспечивает безопасную передачу данных между веб-браузером и сервером: если данные будут перехвачены третьей стороной, то они не смогут их проанализировать

На настоящий момент безопасным считается шифрование с помощью протокола TLS, лежащего в основе протокола HTTPS (HTTP Secure)

Для реализации шифрования необходимо:

  • Зафиксировать доменное имя сервера (получить доступ или приобрести)
  • Получить подписанный сертификат, являющийся основой для шифрования данных
    • Можно заплатить доверенному центру сертификации за выпуск сертификата
    • Можно обратиться к сервису автоматизированного управления сертификатами (Automated Certificate Management Environment, ACME), например Let’s Encrypt
  • Подключить сертификат к веб-серверу либо внутри веб-приложения, либо на уровне прокси-сервера

Без корректной реализации шифрования обеспечить безопасность невозможно


Особенности шифрования #

  • Веб-сервер может установить заголовок Strict-Transport-Security, чтобы указать необходимость использования HTTPS
  • Прозрачность сертификатов позволяет веб-браузеру отслеживать некорректно используемые сертификаты
  • Веб-браузер может отображать смешанное содержимое, т.е. когда часть данных получена по шифрованному каналу, а часть данных по незашифрованному каналу. Даже частичная передача данных по нешифрованному каналу может значительно снизить безопасность. По умолчанию такое поведение блокируется, что хорошо
  • Сервер может использовать устаревшие схемы шифрования, что значительно снижает безопасность пользователя, своевременно обновляйте настройки шифрования, которые устанавливает сервер

Контроль источника запроса #

Следующие технологии используются для реализации контроля источника запроса

  • Политика того же источника определяет как документ или скрипт, загруженный с одного источника может взаимодействовать с ресурсом из другого источника
  • Cross-Origin Resource Sharing (CORS) — механизм, использующий дополнительные заголовки, позволяющий агенту получить разрешение на доступ к ресурсам сервера

Первая технология запрещает доступ к ресурсам сервера, если запрос был сделан со страницы, загруженной с другого домена

diagram


Особенности работы с CORS #

  • При запросе дополнительных данных с того же источника они допускаются
  • При запросе данных с других источников клиент обязуется передать заголовок Origin, указывающий с какого домена выполняется запрос
    • При запросе данных с другого источника клиент должен выполнить предварительный OPTIONS-запрос, для получения политик доступа
    • Сервер должен ответить с заголовком Access-Control-Allow-Origin, указывающий политику разрешений доступа к ресурсу

Поддержка CORS в http4k #

В библиотеке http4k реализована поддержка CORS для серверных приложений

  • ServerFilters.Cors — фильтр, который необходимо настроить для всего приложения
  • CorsPolicy — параметры описания CORS-политики приложения
  • OriginPolicy — набор подходов для обработки источника: любой из, только, шаблон или разрешить все

Защита окружения исполнения сервера #

Доступ к данным должен осуществляться только уполномоченными лицами, чтобы исключить неправомерное использование, изменение, удаление данных или нарушение работы веб-приложения

Для обеспечения безопасности на стороне сервера необходимо выполнять работу систематически над:

  • Исходным кодом веб-приложения (ошибки должны остутствовать)
  • Обновлениями безопасности веб-сервера и другой инфраструктуры
  • Политикой хранения и обновления паролей (как приложения, так и инфраструктуры)
  • Настройками безопасности клиентского кода

Это комплексная задача, корректное решение которой требует детального понимания всех аспектов работы приложения и его окружения

diagram


Типичные проблемы сверверных веб-приложений #

Кратко рассмотрим проблемы, связанные с передачей данных от пользователя

  • Межсайтовый скриптинг (XSS)
  • SQL-инъекции
  • Подделка межсайтовых запросов (CSRF)
  • Перехват нажатий мышкой от пользователя (clickjaking)
  • Отказ в обслуживании (DoS)
  • Раскрытие доступа к файловой системе
  • Выполнение команд в рамках основной ОС

Список текущих актуальных угроз можно посмотреть на сайте OWASP


SQL-инъекция #

Уязвимости SQL-инъекций позволяют злоумышленникам выполнять произвольный SQL-код в базе данных, позволяя получать, изменять или удалять данные независимо от реализованной системы прав пользователя

Эта уязвимость присутствует, если пользовательский ввод, который передаётся в SQL-запрос, может изменить смысл оператора

Рассмотрим следующий код по подготовке SQL-запроса:

val statement = "SELECT * FROM users WHERE name = '$userName';"

Если переменная userName передаётся от пользователя (например в параметрах запроса), то пользователь может передать туда следующую строку:

a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't

В результате выполнится SQL-код:

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM
    userinfo WHERE 't' = 't';

Управление безопасностью #

  • Веб-приложения, работающие в сети Интернет, находятся в небезопасном окружении, постоянно открыто для атак извне
  • Атакующие постоянно находят новые подходы для обходы средств защиты
  • В частности находят ошибки в уже выпущенном программном обеспечении
  • Чем больше функций предоставляет приложение, тем больше возможностей есть у атакующего
  • Ввод от пользователя может и будет содержать проблемные данные
  • Злоумышленники будут пытаться взломать и защиту программного обеспечения, в рамках которой запущено веб-приложение
  • Разработчику веб-приложений необходимо постоянно заниматься изучением новых угроз и способов их противодействию

© A. M. Васильев, 2025, CC BY-SA 4.0, andrey@crafted.su