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
• что такое XSS и SSRF и как от них защищаться (если дошёл до 2-го слоя).