﻿# 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\.](https://owasp.org/Top10/A03_2021-Injection/)

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

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

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

```cpp
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`:

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

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

Исправить уязвимость можно с помощью методов, экранирующих ввод пользователя\. В данном случае воспользуемся методом [`escapeHtml`](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html#unescapeHtml4(java.lang.String)) из библиотеки Apache Commons Lang:

```cpp
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>");
}
```