📚 Теория: Стектрейсы и информация (раскрыть)
Почему это риск?
Stacktrace раскрывает пакеты, классы, SQL, секреты в сообщениях. Это помогает злоумышленнику подготовить точечную атаку.
⚠️ Типичные утечки: JDBC URL, токены, пароли.
Как правильно?
Разделяй профили dev/prod, включай `never`, используй ProblemDetail/JSON-ответы без деталей, логируй в централизованном месте, маскируй данные.
🔐 Фронт получает короткий код ошибки, подробности — только в логах.
Происходит исключение, Spring отправляет stacktrace пользователю.
Атакующий узнаёт структуру пакетов, SQL и секреты.
Подбирает уязвимости, SSRF, RCE, SQLi на основе сведений.
Как надо: выключи stacktrace в проде, используй кастомный error handler, ProblemDetail, логируй ошибки в SIEM, тестируй, что ответы не содержат стеков.
Контекст
Команда поддержки попросила включить стектрейсы «для диагностики» и забыла выключить. Продакшен выдаёт стек любому пользователю при 500.
- Найди строку, где stacktrace включён всегда.
- Предложи: `never` в prod, кастомные ответы, логирование и correlation-id.
- Добавь тест: вызов `/api/error` в prod => без stacktrace, только код.
Конфигурация
Code Review
Референс-исправление
Stacktrace должен быть только в логах. Используй кастомную обработку и настройки.
Флаг ревью: FLAG{java-stacktrace-prod}
server.error.include-stacktrace=never
server.error.include-message=never
spring.mvc.throw-exception-if-no-handler-found=true
Добавь глобальный ExceptionHandler, ProblemDetail, маскирование данных и тесты на отсутствие стеков в ответах.
Проверка флага
После ревью зафиксируй флаг, чтобы дашборд засчитал лабораторию.