首頁 > 後端開發 > C++ > 如何使用 Json.Net 的 TypeNameHandling 保護來自外部來源的 JSON 反序列化?

如何使用 Json.Net 的 TypeNameHandling 保護來自外部來源的 JSON 反序列化?

Linda Hamilton
發布: 2025-01-07 14:12:40
原創
145 人瀏覽過

How Can I Secure My JSON Deserialization from External Sources Using Json.Net's TypeNameHandling?

由於Json.Net TypeNameHandling Auto 導致的外部JSON 漏洞

Json.Net 的TypeNameHandling 自動設定在從不受信任的JSON 反序列化時可能會引入安全風險來源。但是,可以透過遵守特定準則來減輕這些風險。

類型安全與攻擊小工具

利用 TypeNameHandling 的攻擊依賴於建構執行惡意操作的「攻擊小工具」在實例化或初始化時。 Json.Net 透過驗證反序列化類型與預期類型的相容性來防範這些攻擊。

漏洞條件

目標中沒有明確物件或動態成員等級降低了風險,但並不能完全保證安全。在以下情況下可能會出現潛在的漏洞:

  • 非類型化集合:反序列化非類型化集合(例如List)會為集合項目中的攻擊小工具留下空間。
  • CollectionBase 實作: CollectionBase 類型只能在執行時驗證專案類型,從而建立潛在的漏洞視窗。
  • 共用基本型別/介面:與攻擊小工具共用基本型別或介面的型別可以繼承漏洞。
  • ISerialized 介面: 實現 ISerialized 的類型的反序列化可能允許非類型化成員反序列化。
  • 條件序列化: 使用 ShouldSerializeAttribute 方法標記的成員即使未明確序列化也可以反序列化。

降低風險

為了最大限度地降低風險,必須遵循這些建議:

  • 盡可能使用TypeNameHandling.None 。
  • 實作自訂 SerializationBinder 來驗證傳入類型並防止意外類型的反序列化。
  • 考慮忽略 [ Serialized] 屬性,透過將 DefaultContractResolver.IgnoreSerializedAttribute 設為true。
  • 確保所有不得反序列化的物件成員都使用傳回 false 的 ShouldSerializeAttribute 方法進行標記。

遵守這些準則,即使在TypeNameHandling auto 的存在同時顯著降低了攻擊的風險。

以上是如何使用 Json.Net 的 TypeNameHandling 保護來自外部來源的 JSON 反序列化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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