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

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

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

- A3:2021-Injection.

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 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.).

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

CWE-79 OWASP-5.3.3