Когда я делаю свое усиление сканирования против моих проектов 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>
?
<c:out>
уже выполняет html-экранирование, но это обычно не подходит для вывода атрибута. Если у пользователя был контроль над cdt
, они могли бы изменить имя или значение атрибута или добавить дополнительные атрибуты. Символы, подобные пробелам, теперь становятся метасимволами.
То, как вы его использовали, вполне нормально, потому что значение cdt
невозможно напрямую манипулировать пользователем, но устанавливается из безопасной константы. Его можно checked="checked"
только checked="checked"
или пустым. Вы можете отключить экранирование для этого значения, потому что вы хотите, чтобы ваши кавычки были написаны напрямую как html.
Ознакомьтесь с этой статьей о XSS для <c:out>
http://tech.finn.no/2011/04/08/xss-protection-whos-responsibility/
Кроме того, здесь есть связанный с этим большой вопрос, который должен помочь