MIC

Загрузка 0%

MICMIC

Какие распространённые уязвимости безопасности встречаются в веб-разработке? Практический разбор от MIC Studio

·

Самые часто игнорируемые уязвимости в веб-разработке возникают не потому, что хакеры слишком сильны, а потому что базовая защита не была настроена. В этой статье рассматриваются пять направлений — инъекции, права доступа, загрузка файлов, обход авторизации через API и зависимости — с объяснением причин, методов воспроизведения и рекомендаций по исправлению, а также рассказывается, на каком этапе корпоративным сайтам, разработке мини-программ и App имеет смысл обратиться в MIC Studio для тестирования безопасности и реверс-тестирования.

Многие руководители впервые серьёзно задумываются о безопасности после того, как сайт был заражён, панель администратора взломана или пользовательские данные были скачаны целиком. В этот момент разбирать логи и латать дыры обходится гораздо дороже, чем изначально выстроить защиту.


Честно говоря, подавляющее большинство распространённых уязвимостей в веб-разработке — это не какие-то сложные технологии, а базовая работа, которая не была выполнена. Ниже разберём по порядку самые частые ошибки из практики.


I. Инъекционные уязвимости: SQL-инъекции и командные инъекции


SQL-инъекция — самая классическая уязвимость. Причина проста: программа подставляет пользовательский ввод напрямую в SQL-запрос. Например, введя специально сконструированную строку в поле логина, можно обойти проверку пароля и даже выгрузить всю таблицу пользователей.


Типичные подходы и как избежать ошибок:


- Используйте параметризованные запросы или ORM, не пишите конкатенацию строк вручную

- Назначайте права учётной записи базы данных по принципу минимальных привилегий: если бизнесу нужно только чтение, не давайте права на запись

- Отключите подробные сообщения об ошибках в продакшене — сами сообщения об ошибках являются разведданными

- Проверяйте типы входных данных, например, ID должен допускать только цифры


С командными инъекциями та же история. В некоторых сценариях разработки скриптов требуется вызывать системные команды для обработки изображений или генерации файлов. Если имя файла подставляется напрямую в команду, злоумышленник сможет заодно выполнить другие инструкции. Такие проблемы особенно часто встречаются в системах администрирования.


II. Права доступа и обход авторизации: авторизация ≠ наличие прав


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


Разделяют два вида:


- Горизонтальный обход авторизации: обычный пользователь A, изменив номер заказа в URL, видит заказ пользователя B

- Вертикальный обход авторизации: обычный пользователь напрямую обращается к административному интерфейсу, например, для удаления пользователей или экспорта данных


Конкретный сценарий: в проекте разработки мини-программы для бронирования интерфейс имеет вид `/api/order/detail?id=1001`. Фронтенд показывает только собственные заказы, но бэкенд не проверяет, принадлежит ли этот заказ текущему пользователю. Достаточно изменить id на 1002, чтобы увидеть чужой номер телефона и адрес.


Что делать:


- Для каждого интерфейса, работающего с данными, серверная сторона должна проверять «имеет ли текущий пользователь право доступа к этой записи»

- Не полагайтесь на скрытие кнопок на фронтенде для контроля прав доступа

- Разделяйте интерфейсы админ-панели и пользовательской части, логика аутентификации должна быть независимой


III. Загрузка файлов и включение файлов


Сама по себе загрузка файлов не проблема — проблема в том, «можно ли выполнить загруженный файл».


Типичные ошибки:


- Проверяется только расширение на фронтенде — достаточно перехватить запрос и изменить его, чтобы загрузить PHP или JSP

- Каталог загрузки имеет права на выполнение — загрузив скрипт, можно сразу получить доступ к серверу

- Имена файлов предсказуемы — злоумышленник может перебрать и скачать их


Рекомендуемые меры:


- Проверяйте тип файла на сервере, используя белый список, а не чёрный

- Запретите выполнение скриптов в каталоге загрузки, разрешите только статический доступ

- Переименовывайте файлы, используя случайные строки, не сохраняйте исходный путь

- Обрабатывайте изображения повторно, попутно удаляя возможное вредоносное содержимое


IV. Уязвимости интерфейсов и бизнес-логики


Многие уязвимости находятся не на уровне кода, а в бизнес-процессах. Например:


- SMS-код подтверждения не имеет ограничения по количеству попыток и может быть подобран перебором

- Обратный вызов платежа не проверяет подпись — можно подделать статус «оплачено»

- Купоны можно получать параллельно — один человек получает сто штук

- Процесс восстановления пароля можно обойти и напрямую сбросить чужой пароль


Такие проблемы особенно заслуживают внимания в App-разработке и разработке мини-программ, поскольку поверхность атаки через интерфейсы шире, чем у традиционных сайтов. Многие думают: «Если в App не видно интерфейсов, значит, всё безопасно», — но стоит открыть инструмент перехвата трафика, и запросы видны как на ладони.


Рекомендации по избежанию ошибок:


- Добавьте ограничение частоты и риск-контроль для критичных интерфейсов

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

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


V. Проблемы зависимостей и конфигурации


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


- Сторонние CMS и системы конструкторов сайтов долго не обновляются

- Конфигурация промежуточного ПО по умолчанию не изменена: слабые пароли админ-панели, стандартные порты открыты наружу

- Группы безопасности облачного сервера настроены слишком широко, база данных напрямую доступна из интернета

- Тестовые окружения, резервные копии и каталог .git синхронизированы в продакшен


Меры просты: регулярно обновляйте зависимости, перед релизом проводите проверку конфигурации, закрывайте порты, которые не должны быть открыты наружу, удаляйте лишние отладочные файлы из продакшена.


В каких случаях стоит обратиться в MIC Studio


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


- Корпоративный сайт только что прошёл редизайн и запущен, включает членство, формы, оплату

- Разработка мини-программы или App переходит в стадию тестирования, интерфейсов много, логика сложная

- Система администрирования включает множество ролей с разными правами, высок риск обхода авторизации

- Требуется реверс-тестирование для оценки рисков массовых вызовов интерфейсов и кражи данных

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


Подход MIC Studio: сначала инвентаризация активов и интерфейсов, затем тестирование по направлениям — инъекции, права доступа, загрузка, логика, конфигурация — с выдачей воспроизводимого списка проблем и рекомендаций по исправлению, а не просто непонятного отчёта сканера.


Заключение: три вещи, которые можно сделать прямо сейчас


1. Проведите самопроверку прав доступа перед релизом: выпишите все интерфейсы и по каждому задайте вопрос: «Можно ли получить доступ без авторизации?» и «Увижу ли я чужие данные, если подменю ID пользователя?»

2. Контролируйте ввод и вывод: весь пользовательский ввод проверяется, все операции с базой данных параметризованы, все сообщения об ошибках не раскрывают лишнего.

3. Относитесь к безопасности как к постоянному процессу: регулярно обновляйте зависимости, периодически проверяйте конфигурацию, перед релизом важных версий проводите цикл тестирования безопасности — не ждите инцидента, чтобы начать исправлять.


Безопасность — это не разовый проект, а часть процесса разработки. Чем раньше об этом задуматься, тем меньше проблем будет в будущем.