2012-08-13 69 views
3

我的JSP中的以下代碼片段導致了輸入標記上的跨站點腳本攻擊漏洞。XSS跨站點腳本 - Jsp <Input>標記

<form name="acctFrm" method="post" action="<%=contextPath%>/form/acctSummary?rpt_nm=FIMM_ACCT_SUMM_RPT"> 
<table> 
<tr> 
    <td>Account Id:</td> 
    <td> 
    <input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<%=rptBean.getAcctId()%>"/> 
    <a href="javascript:doAcctSubmit()"><img class="tbl1" src="<%=contextPath%>/img/Submit.gif" border="0" /></a> 
    </td> 
</tr> 
</table> 
</form> 

在滲透測試過程,他們能夠通過在標籤的value屬性注入警告腳本來警告一些隨機的信息給用戶,如下所示

<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="1"><script>alert(12345)</script>" /> 

有什麼問題就在這裏,什麼將是修復。

我正在閱讀關於XSS的一些在線參考資料,但我還沒有100%確定可能是什麼問題。

任何幫助將不勝感激。

感謝, 蒂娜

回答

4

我已經使用了以下解決方案,

的價值屬性的scriplet的問題,我用JSTL標記替換它,我讀的地方,JSTL標籤已經inbuild逃逸機制來避免XSS問題。

<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<c:out value=${rptBean.acctId}"/>"/> 

這適用於我的問題。

感謝

2

看來滲透測試人員能夠操縱自己的會話,從而rptBean.getAcctId()將返回一個任意字符串。如果他們可以注入引號和右括號,他們可以「強制關閉」input標籤並插入他們自己的script標籤。

它看起來像滲透測試人員得到的方法返回字符串1"><script>alert(12345)</script>

這表示在寫入頁面時需要轉義數據。我建議看看escaping HTML in jsp上的答案。

另外,請記住,代碼不必「完美」地格式化,以使瀏覽器「正確」呈現它。下面是關於如何攻擊者可能會試圖逃避XSS過濾器的一些鏈接:

始終將用戶數據爲「危險」,並呈現在頁面上時要小心。

0

如果getAcctId()返回的數據來自數據庫,你可以發送給客戶端之前進行過濾。例如檢查數據是否應該是一個數字。