淺析C# Xml Serializer的安全隱患
C# XmlSerializer使用注意事項是什么呢?我們在實際的操作中要注意保護C# XmlSerializer應(yīng)用程序,那是為什么呢?下面我們詳細的來講解下。在創(chuàng)建呵和使用C# XmlSerializer的應(yīng)用程序時,您應(yīng)當注意什么?
C# XmlSerializer注意事項1、C# XmlSerializer創(chuàng)建 C# 文件 (.cs 文件)的過程。
這個過程C# XmlSerializer創(chuàng)建完文件并將其編譯成 .dll 文件,這些 .dll 文件位于由 TEMP 環(huán)境變量指定的目錄中;這些 DLL 文件將發(fā)生序列化。
代碼和 DLL 在創(chuàng)建和進行編譯時,易于遭受惡意進程的攻擊。如果所使用的計算機運行的是 Microsoft Windows NT 4.0 或更高版本,則有可能會有兩個或更多用戶共享臨時目錄。
如果同時存在以下兩種情況,則共享臨時目錄是有危險性的:(1) 兩個帳戶有不同的安全特權(quán);(2) 具有較高特權(quán)的帳戶運行一個使用 XmlSerializer 的應(yīng)用程序。在這種情況下,某一用戶可以替換所編譯的 .cs 或 .dll 文件,由此破壞計算機的安全性。為了避免發(fā)生這一問題,請始終確保計算機上的每一帳戶都有自己的配置文件。如果能夠保證這一點的話,默認情況下,TEMP 環(huán)境變量就會為不同的帳戶指定不同的目錄。
如果一名惡意用戶向 Web 服務(wù)器發(fā)送持續(xù)的 XML 數(shù)據(jù)流(拒絕服務(wù)攻擊),XmlSerializer 會一直處理這一數(shù)據(jù),直到計算機資源不夠用才停止。
如果您所使用的計算機運行 Internet 信息服務(wù) (IIS),并且您的應(yīng)用程序是在 IIS 下運行,就可以避免這類攻擊。IIS 帶有一個控制門,用于禁止處理大于設(shè)定數(shù)量(默認值是 4 KB)的數(shù)據(jù)流。如果您所創(chuàng)建的應(yīng)用程序不使用 IIS,同時該應(yīng)用程序使用 XmlSerializer 進行反序列化,則應(yīng)該實現(xiàn)一個類似的控制門,以阻止拒絕服務(wù)攻擊。
C# XmlSerializer注意事項2、XmlSerializer 將使用給予它的任何類型,對數(shù)據(jù)進行序列化,并運行任何代碼。
惡意對象施加威脅的方式有兩種。一種是運行惡意代碼,另一種是將惡意代碼插入到由 XmlSerializer 創(chuàng)建的 C# 文件中。在第一種情況下,如果惡意對象試圖運行破壞性過程,代碼訪問安全性將幫助防止發(fā)生任何破壞。在第二種情況下,在理論上,惡意對象有可能會以某種方式將代碼插入到由 XmlSerializer 創(chuàng)建的 C# 文件中。盡管對這一問題已進行了徹底的檢驗,而且這類攻擊被認為是不可能的,但您還是應(yīng)該小心一些,一定不要序列化那些不可信的未知類型的數(shù)據(jù)。
C# XmlSerializer注意事項3、已序列化的重要數(shù)據(jù)可能易于遭到攻擊。
XmlSerializer 對數(shù)據(jù)進行了序列化之后,數(shù)據(jù)可以被存儲為 XML 文件,或存儲在其他數(shù)據(jù)存儲區(qū)。如果其他進程可以訪問到您的數(shù)據(jù)存儲區(qū),或是可以在 Intranet 或 Internet 上看到該數(shù)據(jù)存儲區(qū),數(shù)據(jù)就可能被竊取,并被惡意使用。例如,如果您創(chuàng)建了一個應(yīng)用程序,對包含信用卡號碼的訂單進行序列化,這一數(shù)據(jù)就非常重要。為了防止發(fā)生這一問題,請始終保護您的數(shù)據(jù)存儲區(qū),并對數(shù)據(jù)采取保密措施。
C# XmlSerializer的使用特別要注意的事項就向你介紹到這里,希望對了解和學(xué)習C# XmlSerializer有所幫助。
【編輯推薦】