Межсайтовый скриптинг со скрытыми входами - PullRequest
2 голосов
/ 12 августа 2011

Моя компания дала мне задачу решить все проблемы безопасности с конкретным приложением.Система безопасности сообщила об ошибке межсайтового скриптинга.Ошибка находится в следующем поле ввода:

<input type="hidden" name="eventId" value="${param.eventId}"/>

Отчет по безопасности не был очень подробным, но говорят, что они могут сделать POST-запрос к странице, на которой есть вышеуказанный тег, включая следующий вредоносный код:

eventId=%22%3e%3csCrIpT%3ealert(83676)%3c%2fsCrIpT%3e

И что при перезагрузке страницы у нее будет следующее:

<input type="hidden" name="eventId" value=""><sCrIpt>alert(83676)</sCrIpt></value>

Я пытаюсь «быть хакером» и показать уязвимость.Но я не могу понять, как им удается получить этот сценарий там.Я предполагаю, что они включают его в качестве параметра URL в запрос GET для формы, но когда я пытаюсь сделать это сам, я получаю ошибку 403.Кто-нибудь знает, как можно показать эту уязвимость?

Я знаю, что на сайте есть ряд вопросов по XSS, но ни один из них не затрагивает эту тему.

Ответы [ 4 ]

3 голосов
/ 17 августа 2011

Итак, я не уверен почему, но моя первоначальная догадка была верной. Сценарий может быть включен в качестве параметра URL. По какой-то причине это не работает с нашим промежуточным сайтом. Только при запуске приложения локально. Я не уверен, почему, но это работает (только локально):

http://localhost:8080/myUrl/MyAction.do?eventId=%22%3e%3csCrIpT%3ealert(83676)%3c%2fsCrIpT%3e

При этом вы видите всплывающее окно с предупреждением. Я планирую исправить это с помощью функций JSTL.

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...
<input type="hidden" name="eventId" value="${fn:escapeXml(param.eventId)}"/>
1 голос
/ 31 июля 2013

Установка [TamperData][1] надстройки в браузере Firefox, которая позволяет редактировать данные перед отправкой. Не имеет значения, находится ли он в POST или GET.

При использовании этого hidden fields может быть edited.

0 голосов
/ 22 ноября 2014

Я использовал OWASP ESAPI API, так как у старых jsp не было JSTL.Это то, что я использовал:

<input type="hidden" name="dataValue" value="<%=ESAPI.encoder().encodeForHTMLAttribute(dataValue)%>">

Вы также можете использовать API для фильтрации запроса. Параметр (), который мне также нужен, как в:

String userURL = request.getParameter( "userURL" )
boolean isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); 
if (isValidURL) {  
    <a href="<%=encoder.encodeForHTMLAttribute(userURL)%>">link</a>
}

и:

String name = (String) request.getParameter("name");
name = ESAPI.validator().getValidInput("name ", name , "SafeString", 35, true);
0 голосов
/ 14 августа 2011

Что вы хотите сделать, чтобы решить эту проблему, это HTMLAttributeEncode значения, прежде чем поместить его в атрибут value.См. OWASP ESAPI или MS AntiXSS для методов для кодирования атрибутов HTML.Видя, что строка атаки представляет собой кодирование URL-адреса, я думаю, вы предполагаете, что включение его в качестве параметра GET кажется разумным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...