Уязвимости XSS Теги ‹c:out› на страницах JSP

Когда я провожу сканирование своих JSP-страниц моего проекта, Fortify жалуется на дополнительные проблемы XSS, чтобы исправить страницы. Он жалуется в большинстве мест, таких как: <c:out> заявления. Я попытался использовать функцию escapeXml из <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> с помощью ${fn:escapeXml(path)}, но это печатает весь текст как есть.

На самом деле у меня есть код в моем JSP, как показано ниже. Я хочу исправить XSS-уязвимость для тегов <C:out value="${cdt}"/>.

<c:set var="checked">
    checked="checked"
</c:set>
<c:set var="cdt" value="" />
<c:set var="dbt" value="" />

<c:choose>
    <c:when test="${casesForm.institutionRepresents == 'C'}">
        <c:set var="cdt" value="${checked}"/>
    </c:when>
    <c:when test="${casesForm.institutionRepresents == 'D'}">
        <c:set var="dbt" value="${checked}"/>
    </c:when>
</c:choose>

<div class="field LINK_show">
    <label><bean:message key="label.institutions" /></label>
    <div style="display:inline;padding-left:10px">
    <input type="radio" name="institutionRepresents" value="A" <c:out value="${cdt}" />><bean:message key="label.credit" /> 
    <input type="radio" name="institutionRepresents" value="I" <c:out value="${dbt}" />><bean:message key="label.debit" /> 
    </div>
</div>

Есть ли способ исправить XSS-уязвимость в тегах <c:out>?


person Mdhar9e    schedule 12.03.2014    source источник


Ответы (2)


<c:out> уже выполняет экранирование html, но обычно это не подходит для вывода атрибута. Если пользователь имел контроль над cdt, он мог изменить имя или значение атрибута или добавить дополнительные атрибуты. Такие символы, как пробелы, теперь становятся метасимволами.

Однако то, как вы его использовали, нормально, потому что значение cdt не может напрямую манипулироваться пользователем, а устанавливается из безопасной константы. Он может быть только checked="checked" или пустым. Вы можете отключить экранирование для этого значения, потому что вы хотите, чтобы ваши кавычки были записаны непосредственно в виде html.

person fgb    schedule 12.03.2014
comment
вы имеете в виду, что я должен написать проверено = проверено. - person Mdhar9e; 12.03.2014
comment
@Mdhar9e Mdhar9e Вы можете добавить атрибут escapeXml=false к тегу c:out. Проверьте источник страницы в браузере. На выходе не должно быть никаких - person fgb; 12.03.2014

Прочтите эту статью о XSS для <c:out>

http://tech.finn.no/2011/04/08/xss-protection-whos-responsibility/

Кроме того, вот связанный вопрос с отличным ответом, который должен помочь

JSP: тег JSTL ‹c:out›

person Stephen Corcoran    schedule 12.03.2014