2014-11-04 17 views
1

我在工作時有一箇舊的遺留應用程序,我被分配用於修復其安全漏洞。我們對其進行了應用程序評估掃描,其中顯示了XSS漏洞。我通過使用jsoup白名單來消除大量表單輸入。查看報告,我有幾個地方可以將數值注入長型參數。如何從非字符串參數中停止XSS

這裏是發現消息:

了以下更改應用到原始請求:注入'622";alert(240)'入參數的值'name_id'

推理:測試結果似乎表明一個漏洞,因爲應用程序成功在響應中嵌入一個腳本,當頁面加載到用戶的瀏覽器中時將執行該腳本。

Request/Response: GET /applicationName/name.jsp? name_id=622";alert(240) 

該應用程序是用JSP/JavaScript的其表示層,並通過調用的getParameter上HttpRequestContext類獲取的參數值。

這裏是代碼如何接收參數值:

long nameID = request.getParameter("name_id", 0L); 

如何是一個漫長的類型值被改變?它是通過URL嗎?如果是的話,這可以如何緩解或防止?

如果將name_id分配給代碼中的長類型變量,那麼如何將"name_id=622";alert(240)"注入到它中?

回答

1

基本上,XSS攻擊發生在用戶端瀏覽器內部的客戶端。

Wikipedia定義:

跨站點腳本(XSS)是一種計算機安全漏洞 通常在Web應用程序中。 XSS使攻擊者能夠將 用戶的客戶端腳本注入到網頁中。

因此,在服務器端用於nameId參數的數據類型不在此處。通過查看您的場景,似乎必須在客戶端JavaScript中處理get參數的值,這會導致腳本執行。因此,如果您正在這樣做,然後渲染到JSP頁面中,那麼爲了防範XSS攻擊,可以使用JSTLs <c:out>標記或JSTLs fn:escapeXml。兩種方法中使用的escapeXml函數都會轉義XML實體,因此在用戶瀏覽器中不執行腳本。所以,這個攻擊是被阻止的。

請從鏈接,參閱第一次的答案:

XSS prevention in JSP/Servlet web application

+0

謝謝!使用xssflt.jar轉義URL請求是我需要並從您的參考中收集的。 – eaglei22 2014-11-04 18:54:47

+0

要輸出到JavaScript上下文中,您應該[十六進制實體編碼](https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.233 _-_ JavaScript_Escape_Before_Inserting_Untrusted_Data_into_JavaScript_Data_Values),而不是XML或HTML編碼。雖然HTML編碼可能會起作用,但這不是正確的方法,因爲上下文是JS而不是HTML,因此'&'等符號將被輸出爲'&'。 – SilverlightFox 2014-11-05 11:38:43

相關問題