Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Интеграция статического анализа и DevSecOps: PVS-Studio и AppSec.Hub в действии - 16.04

>
>
>
V5330. OWASP. Possible XSS injection. P…
menu mobile close menu
Проверка проектов
Сообщения PVS-Studio
Диагностики общего назначения (General Analysis, C++)
Диагностики общего назначения (General Analysis, C#)
Диагностики общего назначения (General Analysis, Java)
Микрооптимизации (C++)
Диагностика 64-битных ошибок (Viva64, C++)
Реализовано по запросам пользователей (C++)
Cтандарт MISRA
Стандарт AUTOSAR
Стандарт OWASP (C++)
Стандарт OWASP (C#)
Стандарт OWASP (Java)
Проблемы при работе анализатора кода
Дополнительная информация
toggle menu Оглавление

V5330. OWASP. Possible XSS injection. Potentially tainted data might be used to execute a malicious script.

04 Апр 2025

Анализатор обнаружил ситуацию, при которой данные, полученные из внешнего источника, могут быть использованы для запуска вредоносного скрипта. Подобный код может быть уязвим к XSS.

Уязвимости такого типа относятся к категории рисков OWASP Top 10 Application Security Risks 2021:

XSS (Cross-Site Scripting) — это уязвимость, которая позволяет злоумышленнику вставлять вредоносный JavaScript-код на веб-страницу, которую видит другой пользователь. В результате этого злоумышленник может украсть данные пользователя, провести фишинг-атаку или выполнить другие злонамеренные действия.

К XSS чаще всего уязвимы параметры URL, тело HTTP-запроса и поля ввода HTML-страниц.

Примером кода, подверженного XSS-инъекции, может быть такая обработка запроса в Servlet:

protected void doPost(HttpServletRequest req, HttpServletResponse res) {
  String comment = req.getParameter("comment");
  res.setContentType("text/html");
  res.getWriter().write("<html><body>");
  res.getWriter().write("<h3>User Comment:</h3>");
  res.getWriter().write("<p>" + comment + "</p>");
  res.getWriter().write("</body></html>");
}

Данный метод принимает комментарий от пользователя и возвращает ответ, который затем будет отображён на странице. Но так как сообщение будет отправлено без предварительной фильтрации, злоумышленник может указать следующие значение для параметра comment:

<script>alert("XSS Injection")</script>

Когда страница открывается, браузер пользователя выполняет этот вредоносный код, что приводит к всплывающему окну с сообщением "XSS Injection". В реальном случае злоумышленник может использовать более сложные и вредоносные скрипты для кражи cookies или выполнения других атак.

Исправить уязвимость можно с помощью методов, экранирующих ввод пользователя. В данном случае воспользуемся методом escapeHtml из библиотеки Apache Commons Lang:

protected void doPost(HttpServletRequest req, HttpServletResponse res) {
  String comment = req.getParameter("comment");
  res.setContentType("text/html");
  res.getWriter().write("<html><body>");
  res.getWriter().write("<h3>User Comment:</h3>");
  res.getWriter().write("<p>" + 
                        StringEscapeUtils.escapeHtml4(comment) 
                        + "</p>");
  res.getWriter().write("</body></html>");
}

Данная диагностика классифицируется как:

close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Я хочу принять участие в тестировании
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам