首頁 > 後端開發 > C++ > 您的 Json.Net `TypeNameHandling` 設定(自動)是否容易受到外部 JSON 資料攻擊?

您的 Json.Net `TypeNameHandling` 設定(自動)是否容易受到外部 JSON 資料攻擊?

DDD
發布: 2025-01-07 14:39:42
原創
965 人瀏覽過

Is Your Json.Net `TypeNameHandling` Setting (Auto) Vulnerable to External JSON Data Attacks?

Json.Net TypeNameHandling 設定為 Auto 會造成威脅嗎?

在 JSON 反序列化中,Json.Net 的 TypeNameHandling 設定。網路在減輕潛在威脅方面發揮著至關重要的作用。但是,對於將此設定與使用者提供的 JSON 資料一起使用的安全性仍然存在擔憂。讓我們深入研究這個問題,探討潛在的風險和預防措施。

TypeNameHandling 的漏洞

外部 JSON 負載可以被操縱以包含指定的「$type」屬性用於反序列化的類型。如果這些類型沒有經過仔細驗證,攻擊者就可以利用它們來實例化稱為「攻擊小工具」的惡意物件。這些小工具可以執行惡意操作,例如遠端程式碼執行 (RCE) 或檔案系統操縱。

保護措施

Json.Net 已實施防護措施來防止此類攻擊:

  • 未知屬性:
  • 未知屬性:它忽略未知屬性,使具有無關「$type」屬性的JSON 有效負載無害。

序列化相容性: 在多態性值反序列化期間,它會檢查解析的類型是否與預期類型相符。如果沒有,則會拋出異常。

潛在漏洞
  • 儘管採取了這些措施,但在某些情況下仍然可能構建攻擊小工具,即使在缺少明顯的無類型成員:
  • 無型別集合:反序列化未知類型的集合,如ArrayList、List 或 HashTable,可能會允許集合項目中的攻擊小工具。
  • 半類型集合:反序列化從CollectionBase 派生的集合,支援運行時類型驗證,可以為小工具建立視窗
  • 共享基底類型: 宣告為攻擊小工具共享的介面或基底類型的多型成員(例如ICollection、IDisposable)可能會引入漏洞。
  • ISerialized 介面: 實作ISerialized 的類型可能會無意中反序列化非類型化

條件序列化: 在ShouldSerializeAttribute 標記為非序列化的成員如果存在於JSON 負載中,仍可能被反序列化。

建議為了盡量降低風險,請考慮以下建議:
  • 驗證未知類型:實作自訂 SerializationBinder 來檢查傳入的序列化類型並拒絕未經授權的類型。
  • 避免無型別成員:確保您的資料模型不包含物件、動態或其他潛在可利用類型的成員類型。
  • 設定 DefaultContractResolver: 考慮將 DefaultContractResolver.IgnoreSerializedInterface 和 DefaultContractResolver.IgnoreSerializedAttribute 設為 true。
  • 查看非序列化成員的代碼: 驗證該成員標記為非序列化在意外情況下不會被反序列化。

透過遵循這些最佳實踐,您可以透過將 Json.Net TypeNameHandling 設定為 Auto 來大幅降低外部 JSON 資料損害您的系統的可能性。

以上是您的 Json.Net `TypeNameHandling` 設定(自動)是否容易受到外部 JSON 資料攻擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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