簡體   English   中英

跨站點腳本:差的驗證(輸入驗證和表示,數據流)

[英]Cross-Site Scripting: Poor Validation (Input Validation and Representation, Data Flow)

我已經在HP fortify門戶中掃描我的應用程序並遇到問題跨站點腳本:差的驗證(輸入驗證和表示,數據流)。

我已經在使用ESAPI庫了。

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

提前致謝。

Fortify“跨站點腳本:差評驗”抱怨您的OUTPUT編碼不正確或無效。 輸出編碼(轉義)的目的是將特殊字符(元字符)限制為文字字符串,因此它們不能作為命令執行。

為了補救,你做:

步驟1。 確定誰將使用這個“被編碼的上下文”?

第2步。 根據傳輸協議和下游需求正確編碼上下文。 例如:

  • 如果在URL的[?query]部分消耗了數據,則需要找到一個函數來包裝(也就是編碼,轉義)18個保留字符(!*'();:@&= + $,/?#[ ])對HTTP協議有特殊意義(不必編碼整個URL)。 詳見RFC3986 Sec 2.2
  • 如果數據被用作XML實體,則需要編碼5個元字符(&<>“')(檢查W3C XML Spec Sec 2.4 )。但是,這並不總是正確的。數據用作注釋,處理指令或在CDATA部分不需要編碼。

步驟#3。 收集編碼示例以供將來選擇和使用:(對不起,當發布為代碼時,一些內容發生了變化,因此發布為圖像)

需要考慮ESAPI庫的開銷,是否值得為一次修復加載30 MB jar?
在此輸入圖像描述

在此輸入圖像描述

使用輕量級org.owasp.encoder庫輸出編碼

在此輸入圖像描述

當您使用編碼來阻止XSS時會發生這種情況。 如果你沒有編碼,你會得到一個關鍵的XSS發現。 由於您正在進行編碼,因此將其移至介質中。 要完全阻止XSS,您可能希望在給定上下文的情況下使用正確的編碼,然后確保您的輸入正在驗證。 有些庫可以提供幫助,例如Apache Struts Validator,但即使這樣,Fortify也無法准確確定您的輸入驗證是否足夠。 靜態分析產品無法確定變量內部的數據類型,因此檢查正確的驗證確實沒有好辦法。 您要做的是驗證輸入,一旦您確定對編碼和輸入驗證的滿意度,您就可以取消查找結果。

在編寫驗證方法之后,您可以將它們存儲在jar文件中,然后為Fortify編寫自定義規則,以便它知道這些方法提供XSS驗證。 在將來的掃描中不會發生此問題。 查看Fortify自定義規則指南中的數據流清理規則。

Fortify非常了解ESAPI庫,所以請告訴我你在inout和輸出調用中調用的ESAPI庫的哪個函數? 您可以參考https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet,了解您必須為XSS使用的各種上下文和驗證,並根據您使用ESAPI函數所需的上下文。

在你的情況下,你使用的是簡單的編碼,這不是一個准確的解決方案,所以盡管fortify降低了嚴重性,但仍然是一個問題,所以請在源和接收器上使用正確的ESAPI函數。 Fortify不應該標記問題。 如果你看到它然后創建一個自定義規則,如另一個答案所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM