2016-02-12 62 views
2

我已經掃描我的惠普應用鞏固門戶和獲取問題的跨站點腳本:可憐的驗證(輸入驗證和表示,數據流)。跨站點腳本:可憐的驗證(輸入驗證和表示,數據流)

我已經在使用ESAPI庫。

我該怎麼做才能解決這個問題。是否有任何其他庫/罐子來驗證輸入。

在此先感謝。

+0

普爾驗證
enter image description here

enter image description here

輸出編碼?糾正它! –

回答

0

當您使用編碼來防止XSS時,會發生這種情況。如果你沒有編碼,你會得到一個關鍵的XSS發現。由於您正在編碼,因此它被移到了媒體上。爲了完全防止XSS,您希望使用給定上下文的正確編碼,然後確保您的輸入正在驗證中。有些庫可以提供幫助,例如Apache Struts Validator,但即使如此,Fortify也無法準確確定您的輸入驗證是否足夠。靜態分析產品無法確定變量內的數據類型,因此確實沒有好方法來檢查適當的驗證。你想要做的是驗證輸入,並且一旦你確定發現滿足編碼和輸入驗證,你可以抑制這個發現。

你寫的,你可以將它們存儲在一個jar文件的驗證方法,然後經過寫Fortify的自定義規則,以便它知道這些方法提供XSS驗證。這個問題在未來的掃描中不會發生。檢查Fortify自定義規則指南中的數據流清理規則。

+0

嗨,感謝您的幫助 – Shruti

0

Fortify的理解ESAPI庫非常好所以請你告訴我你的lib在INOUT和輸出呼叫呼叫該ESAPI的功能?您可以參考https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet獲取您必須用於XSS的各種上下文和驗證,並根據需要使用ESAPI功能的上下文進行驗證。

你的情況,你用簡單的編碼是不準確的解決方案,因此雖然設防具有減輕其嚴重性,但仍然是其一個問題,所以請使用正確的ESAPI功能在源和宿。然後Fortify不應該標記問題。如果你看到它,然後創建一個自定義規則,如另一個答案中所述。

+0

我已經使用ESAPI.encoder()對值進行編碼。我正確的方向嗎? – Shruti

+0

對不起,旅行,這是不正確的,你需要根據你的上下文使用編碼...我可以看到其他用戶已經詳細回答它..這看起來像一個完美的解決方案。 – SecurityNinja

3

Fortify的「跨站點腳本:可憐的驗證」抱怨,你的輸出編碼或者是不當或無效。輸出編碼(轉義)的目的是將特殊字符(meta char)限制爲文字字符串,因此它們不能作爲命令執行。

要修復,你這樣做:

第1步。確定誰將使用這個「被編碼的上下文」?

步驟#2。根據交付協議和下游需求正確編碼上下文。例如:

  • 如果數據在URL的[?查詢]部分消耗,則需要找到一個函數來包裝(又名編碼,轉義)18個保留字符(!*'();:@ & = + $,/?#[])對HTTP協議有特殊含義(不必編碼整個URL)。 (詳細信息請參閱RFC3986 Sec 2.2
  • 如果數據以XML實體的形式消耗,則需要對5個元字符進行編碼(& <>「')(請檢查W3C XML Spec Sec 2.4)但這並非總是如此。用作註釋的數據,處理指令或CDATA部分不需要編碼。

步驟#3。對於未來的選擇和使用收集編碼實例:(對不起,當出任代碼,一些內容改變,所以後期的形象)

需要考慮ESAPI圖書館的開銷,是值得載入30 MB罐子一個修復?使用重量輕org.owasp.encoder庫

enter image description here