Backend vulnerabilities
Уязвимости бэкенда на примере маркетплейса: инъекции, SSRF, IDOR, mass assignment, обход пути, XXE, подбор паролей, CSRF и CORS, гонки, ошибки с JWT. Атака, код на четырёх языках, починка и тест.
Раздел про дыры, которые бэкенд-разработчик сам пишет в обычном коде: склеил SQL из строки, сходил по ссылке из запроса, вернул заказ по номеру без проверки владельца, принял JSON целиком в сущность. Ни одна из них не требует хитрой инфраструктуры, все находятся на ревью, если знать, куда смотреть.
Здесь нет теории ради теории. Каждая статья показывает атаку на одном и том же маркетплейсе, уязвимый код на Java, Go, Node и Python, починку и тест, который ловит регрессию. В каждой статье есть живые примеры: их можно запустить прямо на странице и увидеть, как атака проходит, а после починки перестаёт.
Зачем отдельный раздел
Паттерны авторизации отвечают на вопрос «кто ты и что тебе можно»: токены, роли, владение ресурсом, вызовы между сервисами. Но сервис с идеальной авторизацией всё равно отдаёт чужие данные через ' OR 1=1 --, ходит во внутреннюю сеть по ссылке на картинку и пишет файл за пределы каталога. Это другой класс ошибок: не «кому можно», а «что сервер делает с недоверенным вводом».
Правила для автоматического ревью собраны в стандарте безопасности бэкенда: SAST, уязвимые зависимости, секреты, образы, криптография. Этот раздел объясняет, откуда эти правила взялись и как выглядит дыра, которую они закрывают.
Карта статей и OWASP
Рамка раздела - два списка OWASP: OWASP Top 10:2025 для веб-приложений и OWASP API Security Top 10:2023 для API. Категории ниже сверены со списками CWE на страницах категорий Top 10:2025. Прочерк значит, что отдельной категории под тему в списке нет.
| Статья | Top 10:2025 | API Top 10:2023 | Главные CWE |
|---|---|---|---|
| Инъекции: SQL, NoSQL, команды ОС и шаблоны | A05 Injection | - | CWE-89, CWE-78, CWE-943 |
| SSRF | A01 Broken Access Control | API7 SSRF | CWE-918 |
| IDOR и BOLA | A01 Broken Access Control | API1 BOLA, API5 BFLA | CWE-639 |
| Mass assignment и лишние поля в ответе | A08 Software or Data Integrity Failures | API3 BOPLA | CWE-915, CWE-213 |
| Обход пути и загрузка файлов | A01, A06 Insecure Design | - | CWE-22, CWE-434 |
| XXE и небезопасная десериализация | A02 Security Misconfiguration, A08 | - | CWE-611, CWE-502 |
| Подбор паролей и лимиты запросов | A07 Authentication Failures | API2, API4 | CWE-307, CWE-770 |
| Открытый редирект, CSRF и CORS | A01, A02 | API8 Security Misconfiguration | CWE-601, CWE-352, CWE-942 |
| Гонки и двойное списание | A06 Insecure Design | - | CWE-362, CWE-367 |
| Ошибки с JWT | A04 Cryptographic Failures, A07 | API2 Broken Authentication | CWE-347 |
| Как искать уязвимости | все | все | - |
Если времени мало, начни с четырёх: инъекции, IDOR, SSRF и JWT. Это ядро раздела, остальные статьи опираются на те же приёмы.
Как читать статью
Все статьи построены одинаково, чтобы по ним было удобно возвращаться к нужному месту:
- Атака. Что делает атакующий и что получает: чужие заказы, доступ к метаданным облака, списанные дважды деньги.
- Код. Как дыра выглядит в обычном обработчике на четырёх языках. Язык переключается над блоком кода.
- Починка. Не «экранируй ввод», а конкретный приём: параметр вместо склейки, список разрешённых значений, проверка владельца в самом запросе.
- Проверка. Тест, который воспроизводит атаку, и что смотреть на ревью. Тест остаётся в проекте и ловит регрессию.
Дальше идут типичные ошибки, разделы «Глубже» для тех, кому нужны детали, и «Коротко» для повторения перед собеседованием.
Сквозной пример: маркетплейс
Все атаки показаны на одном маркетплейсе. У него есть покупатели и продавцы, заказы и платежи, поддержка с доступом к чужим заказам, вебхуки для продавцов, загрузка картинок товаров, экспорт заказов в PDF и выплаты продавцам. Этого хватает, чтобы каждая уязвимость выглядела как задача из реального проекта:
- покупатель меняет номер в
/orders/1001и видит чужой заказ; - продавец указывает вебхук на
http://169.254.169.254/и получает ключи облака; - поиск по товарам склеивает сортировку из параметра запроса;
- два одновременных запроса применяют промокод «один на покупателя» дважды.
Тот же маркетплейс используется в паттернах авторизации и в кейсе Use Case Pattern, поэтому сущности и роли знакомы.
Что дальше
- Паттерны авторизации: слои проверки, владение ресурсом, персональные данные и секреты в логах.
- Стандарт безопасности бэкенда: правила для ревью и автоматических проверок.
- Безопасность в браузере: XSS, CSRF, CORS и cookie со стороны фронтенда.
- Безопасность AI-агентов и инъекция в промпт: те же идеи, когда недоверенный ввод читает модель.