我在工作時有一箇舊的遺留應用程序,我被分配用於修復其安全漏洞。我們對其進行了應用程序評估掃描,其中顯示了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)"
注入到它中?
謝謝!使用xssflt.jar轉義URL請求是我需要並從您的參考中收集的。 – eaglei22 2014-11-04 18:54:47
要輸出到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