XSS-уязвимости теги <c: out> на страницах JSP

1

Когда я делаю свое усиление сканирования против моих проектов 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>?

Теги:
jsp
xss
fortify

2 ответа

3

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

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

  • 0
    Вы имеете в виду, что я должен написать проверил = "проверил".
  • 0
    @ Mdhar9e Вы можете добавить атрибут escapeXml = "false" в тег c: out. Проверьте источник страницы в браузере. Вывод не должен иметь & quot;
0

Ознакомьтесь с этой статьей о XSS для <c:out>

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

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

JSP: тег <c: out> JSTL

Ещё вопросы

Сообщество Overcoder
Наверх
Меню