外部 JSON 會因為 Json.Net TypeNameHandling Auto 而變得脆弱嗎?
問題:
在使用者上傳自訂JSON 物件的網站應用程式中,必須意識到出現的潛在威脅來自自動JSON 類型反序列化。問題是,如果反序列化的唯一類型是特定類型(例如 MyObject)並且 MyObject 的所有成員都不具有 System.Object 或動態類型,那麼自動類型反序列化是否容易受到漏洞的影響。
答案:
雖然遵守這些條件可以顯著降低風險,但並不能保證完全保護。 Json.Net 的 TypeNameHandling 設定為 Auto 時,即使 MyObject 中不存在對應字段,也有可能根據「$type」資訊建立物件。
詳細說明:
針對 Json.Net 的攻擊利用 TypeNameHandling 設定來建構「攻擊小工具」-旨在危害接收系統的物件。 Json.Net 的保護機制包括忽略未知屬性和檢查類型相容性。然而,在某些情況下,即使沒有任何明顯的非類型化成員,也可以建構攻擊小工具:
建議:
總之,雖然所提供的條件可以顯著降低風險,但值得注意的是,它並不能保證完全的安全性。 Json.Net 的 TypeNameHandling Auto 設定仍然可能有利於攻擊小工具的創建,因此需要採取額外的預防措施,例如自訂序列化綁定器。
以上是即使將反序列化限制為特定類型,使用 Json.Net 的「TypeNameHandling.Auto」自動 JSON 反序列化是否安全?的詳細內容。更多資訊請關注PHP中文網其他相關文章!