Карта / Угрозы (OWASP) / OWASP Top 10

OWASP Top 10

OWASP Top 10 — список десяти наиболее критичных уязвимостей веб-приложений, обновляемый каждые несколько лет организацией OWASP. Не просто теория — реальные уязвимости, через которые взламывают компании каждый день.

Три самых важных для Java-разработчика:

1. Инъекции (SQL Injection, Command Injection) Злоумышленник вставляет вредоносный код в данные, которые выполняются как команда.

-- Опасно: конкатенация строк
"SELECT * FROM users WHERE name = '" + input + "'"
-- Ввод: ' OR '1'='1  →  выборка ВСЕХ пользователей

-- Безопасно: prepared statements (см. тему «Валидация»)

2. Broken Authentication — слабые пароли, незащищённые сессии, отсутствие rate-limiting на login.

3. Broken Access Control — пользователь видит чужие данные. Классический пример:

GET /api/users/123/documents  ← авторизован как user #456

Если нет проверки «это твой ресурс?» — уязвимость (IDOR — Insecure Direct Object Reference).

Другие важные позиции: XSS (выполнение чужого JS в браузере жертвы), SSRF (сервер делает запросы куда укажет злоумышленник), Security Misconfiguration (оставленные дефолтные пароли, открытые порты).

Копнуть глубже

XSS (Cross-Site Scripting) — три вида:

  • Stored XSS: злоумышленник сохраняет скрипт в БД (в комментарии), каждый посетитель страницы выполняет его.
  • Reflected XSS: вредоносный JS в URL-параметре, который сервер вставляет в ответ без эскейпинга.
  • DOM XSS: клиентский JS использует document.write(location.hash) — без участия сервера.

Защита: эскейпинг при выводе HTML (Thymeleaf делает это автоматически), Content-Security-Policy заголовок.

SSRF (Server-Side Request Forgery) — сервер выполняет HTTP-запрос по URL, указанному пользователем:

// Уязвимо: url приходит от пользователя
String content = restTemplate.getForObject(userProvidedUrl, String.class);

Атакующий указывает http://169.254.169.254/latest/meta-data/ (AWS metadata endpoint) и получает токены инстанса. Защита: whitelist разрешённых доменов, блокировка внутренних адресов (localhost, 10.0.0.0/8).

Security Misconfiguration — самая частая причина взломов не через код, а через конфигурацию:

  • Spring Boot Actuator с открытым /actuator/env и /actuator/beans на продакшене
  • Оставленные дефолтные пароли (admin/admin в H2 Console, open Swagger UI)
  • Открытый MongoDB без аутентификации (тысячи случаев в реальности)
  • Подробные сообщения об ошибках с stacktrace в ответе API
🎤 Закрыл тему, если можешь объяснить:
• что такое SQL-инъекция и IDOR — на конкретном примере;
• что такое XSS и SSRF и как от них защищаться (если дошёл до 2-го слоя).