Rostelecom Security Labs

SecureCode Review — Java Servlet

Проверяем Servlet, который выводит пользовательское сообщение на страницу. Нужно указать опасную строку и объяснить, как закрыть XSS.

📚 Теория: XSS в Java Servlet (раскрыть)

Откуда берётся XSS?

Servlet выводит строку целиком в HTML. Если строка пришла из запроса, злоумышленник может передать <script> и браузер выполнит его.

🔎 Признак: конкатенация пользовательского ввода внутри out.println().

Почему фильтр не сработал?

В Servlet API нет автоматического экранирования. Нужно явно вызвать StringEscapeUtils, HtmlUtils или применять ESAPI.

🛡️ Подбираем экранирование под контекст (HTML, атрибут, JS).

1. Пользователь

Передаёт сообщение: ?message=<script>alert(1)</script>

2. Сервер

Вставляет параметр в HTML без экранирования.

3. Браузер

Выполняет скрипт, который крадёт cookie или сессию.

Быстрый фикс: out.println(HtmlEscapers.htmlEscaper().escape(message)); или использовать JSTL <c:out>. Главное — никогда не конкатенируй необработанный ввод в HTML.

Контекст

Команда реализовала гостевую книгу, где пользовательское сообщение выводится прямо в шаблон. Предполагается, что фронтенд сам присылает безопасные данные — но это неверно. Разработчик забывает экранировать вывод и получает XSS.

Сниппет

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

Code Review

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

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