1

当我对我的项目 JSP 页面进行强化扫描时,Fortify 抱怨更多 XSS 问题以修复页面。它在抱怨大多数地方,例如:<c:out>陈述。我尝试使用函数 escapeXml ,<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>但这${fn:escapeXml(path)}是按原样打印整个文本。

实际上,我的 JSP 中有如下代码。我想修复<C:out value="${cdt}"/>标签的 XSS 漏洞。

<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>

有没有办法修复<c:out>标签中的 XSS 漏洞?

4

2 回答 2

3

<c:out>已经进行了 html 转义,但这通常不适合输出属性。如果用户可以控制cdt,他们可以修改属性名称或值,或添加额外的属性。像空格这样的字符现在变成了元字符。

不过,您使用它的方式是可以的,因为cdt用户不能直接操作它的值,而是从一个安全的常量中设置的。它只能是checked="checked"或空的。您可以禁用该值的转义,因为您希望将引号直接写为 html。

于 2014-03-12T14:01:35.527 回答
0

查看这篇关于 XSS 的文章<c:out>

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

另外,这是一个相关的问题,有一个很好的答案,应该会有所帮助

JSP:JSTL 的 <c:out> 标签

于 2014-03-12T12:40:01.823 回答