安全處理 Newtonsoft JSON 中的 TypeNameHandling
在 JSON 序列化和反序列化的過程中,謹慎處理 TypeNameHandling 至關重要,尤其是在處理外部數據源時。
TypeNameHandling.All 雖然方便了反序列化過程中的類型推斷,但也存在安全風險。當反序列化來自不受信任來源的 JSON 時,此設置允許 Newtonsoft Json 創建元數據中指定的任意類型的實例。
潛在危險:
攻擊者可以發送包含 $type 屬性的惡意 JSON,該屬性引用可能具有破壞性的類型,例如 System.CodeDom.Compiler.TempFileCollection。此類型在垃圾回收期間可以自動刪除受害者係統上的文件,從而危及文件完整性。
示例:
考慮以下惡意 JSON 有效負載:
<code class="language-json">{ "$type": "System.CodeDom.Compiler.TempFileCollection", "BasePath": "%SYSTEMDRIVE%", "KeepFiles": "False", "TempDir": "%SYSTEMROOT%" }</code>
如果在沒有適當的安全措施的情況下反序列化此 JSON,則將實例化 TempFileCollection 類型並嘗試根據指定的參數刪除文件。
緩解措施:
為了降低這種風險,在使用 TypeNameHandling.All 反序列化時,必須使用自定義 SerializationBinder 驗證傳入的類型。此綁定器可以在構造實例之前驗證引用的類型的安全性。
以上是如何在Newtonsoft JSON中安全地處理Typenamehandling以防止避免攻擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!