Rostelecom Security Labs

SecureCode Review — Signup ReDoS

Регистрация пользователей валидирует имя через @Pattern с катастрофическим бэктрекингом и не ограничивает длину входных данных. Найди строку, объясни риск ReDoS и предложи безопасную валидацию.

📚 Теория: Валидация и Regex DoS (раскрыть)

Катастрофический бэктрекинг

Регулярки с вложенными квантификаторами ((\\w+\\.?)+) перебирают экспоненциально много путей. Одна длинная строка подвесит поток.

⚠️ DoS по CPU — типичная атака на валидацию форм.

Как защититься?

Используй встроенные валидаторы (@Email, @Pattern с детерминированными шаблонами), ограничивай длину (@Size), включай rate limiting и pre-validation (например, String.length()).

🔐 Для критичных сценариев — токены, очереди, отдельный воркер.

1. Ввод

Атакующий шлёт 100 КБ строки "aaaaaaaa...!".

2. Бэктрекинг

Регексп срабатывает в @Pattern, JVM перебирает миллионы комбинаций.

3. Блокировка

Поток завис, пулы исчерпаны, сервис недоступен.

Как надо: ограничивай данные на уровне HTTP и DTO, переписывай регекспы в DFA (без вложенных квантификаторов), оборудуй таймауты и тесты с ReDoS-пэйлоадами.

Контекст

Команда хотела гибкую валидацию юзернейма и позаимствовала классический регексп «\\w+\\.?» в цикле. В итоге даже обычный пользователь с длинным ником может положить регистрацию. Нет лимитов размера запроса, нет circuit breaker.

Сниппет

Загружаем сниппет…

Code Review

Проверка флага

После ревью зафиксируй флаг, чтобы дашборд засчитал лабораторию.