首頁 > 後端開發 > C++ > 即使將反序列化限制為特定類型,使用 Json.Net 的「TypeNameHandling.Auto」自動 JSON 反序列化是否安全?

即使將反序列化限制為特定類型,使用 Json.Net 的「TypeNameHandling.Auto」自動 JSON 反序列化是否安全?

Mary-Kate Olsen
發布: 2025-01-07 14:16:41
原創
874 人瀏覽過

Is Automatic JSON Deserialization with Json.Net's `TypeNameHandling.Auto` Secure, Even When Limiting Deserialization to a Specific Type?

外部 JSON 會因為 Json.Net TypeNameHandling Auto 而變得脆弱嗎?

問題:

在使用者上傳自訂JSON 物件的網站應用程式中,必須意識到出現的潛在威脅來自自動JSON 類型反序列化。問題是,如果反序列化的唯一類型是特定類型(例如 MyObject)並且 MyObject 的所有成員都不具有 System.Object 或動態類型,那麼自動類型反序列化是否容易受到漏洞的影響。

答案:

雖然遵守這些條件可以顯著降低風險,但並不能保證完全保護。 Json.Net 的 TypeNameHandling 設定為 Auto 時,即使 MyObject 中不存在對應字段,也有可能根據「$type」資訊建立物件。

詳細說明:

針對 Json.Net 的攻擊利用 TypeNameHandling 設定來建構「攻擊小工具」-旨在危害接收系統的物件。 Json.Net 的保護機制包括忽略未知屬性和檢查類型相容性。然而,在某些情況下,即使沒有任何明顯的非類型化成員,也可以建構攻擊小工具:

  • 非類型化集合的反序列化(例如ArrayList、List )
  • 半類型集合(例如, CollectionBase)
  • 實現ISerialized 的類型的反序列化(例如Exception)
  • 具有成員條件序列化的類型的反序列化(例如 public object tempData; public bool ShouldSerializeTempData() { return false; } })

建議:

  • 謹慎使用:反序列化外部JSON 時應謹慎使用TypeNameHandling,並且自律定義SerializationBinder 推薦用於驗證。
  • 檢查資料模型:確保沒有成員類型是物件、動態或與攻擊小工具相容。
  • 考慮序列化綁定器:實現自訂SerializationBinder 來嚴格控制哪些類型

總之,雖然所提供的條件可以顯著降低風險,但值得注意的是,它並不能保證完全的安全性。 Json.Net 的 TypeNameHandling Auto 設定仍然可能有利於攻擊小工具的創建,因此需要採取額外的預防措施,例如自訂序列化綁定器。

以上是即使將反序列化限制為特定類型,使用 Json.Net 的「TypeNameHandling.Auto」自動 JSON 反序列化是否安全?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板