2014-03-12 134 views
1

當我對我的項目JSP頁面進行強化掃描時,Fortify抱怨更多的XSS問題來修復頁面。它抱怨大部分地方,如:<c:out>陳述。我使用${fn:escapeXml(path)}來自<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>的函數escapeXml嘗試過,但這是按原樣打印整個文本。XSS漏洞<c:out> JSP頁面中的標籤

其實我在我的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漏洞?

回答

2

<c:out>已經沒有HTML逃逸,但這通常不適合輸出屬性。如果用戶可以控制cdt,他們可以修改屬性名稱或值,或添加額外的屬性。像空格這樣的字符現在變成元字符。

但是,您使用它的方式沒有問題,因爲cdt的值不能由用戶直接操作,而是從安全常數中設置。它只能是checked="checked"或空。您可以禁用該值的轉義,因爲您希望將引號直接寫爲html。

+0

你的意思是說,我應該寫檢查= "檢查"。 – Mdhar9e

+0

@ Mdhar9e您可以將escapeXml =「false」屬性添加到c:out標記。在瀏覽器中檢查頁面源代碼。輸出不應有任何" – fgb