2014-03-12 3 views
1

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

Фактически у меня есть код в моем 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> теги?

ответ

2

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

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

+0

Вы имеете в виду, что я должен написать checked = " проверено ". – Mdhar9e

+0

@ Mdhar9e Вы можете добавить атрибут escapeXml = "false" в тег c: out. Проверьте источник страницы в браузере. На выходе не должно быть " – fgb