V5330. OWASP. Possible XSS injection. Potentially tainted data might be used to execute a malicious script.
Анализатор обнаружил ситуацию, при которой данные, полученные из внешнего источника, могут быть использованы для запуска вредоносного скрипта. Подобный код может быть уязвим к 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>");
}
Данная диагностика классифицируется как: