Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
menu mobile close menu
Проверка проектов
Дополнительная информация
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>");
}

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.).

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