首頁 >後端開發 >C++ >Newtonsoft JSON的Typenamehandling是否可以安全地闡明外部JSON數據?

Newtonsoft JSON的Typenamehandling是否可以安全地闡明外部JSON數據?

Susan Sarandon
Susan Sarandon原創
2025-01-31 16:31:09411瀏覽

Is Newtonsoft JSON's TypeNameHandling Safe for Deserializing External JSON Data?

> newtonsoft json's TypeNameHandling:外部JSON

的安全考慮因素

> Newtonsoft的JSON庫提供TypeNameHandling>用於包含類型信息的json的

。 但是,將其與不受信任的外部JSON來源一起使用,帶來了重大的安全風險。

使用TypeNameHandling.All

進行挑選外部JSON的安全風險

沒有ASerializationBinder>,TypeNameHandling.All>允許Deserializer創建JSON元數據中指定的任何類型的實例。 這打開了可能在您的應用程序或.NET框架中發送有害類型的惡意行為者的脆弱性。

>

示例漏洞:

考慮一個簡單的Car類:

<code class="language-csharp">public class Car
{
    public string Maker { get; set; }
    public string Model { get; set; }
}</code>

看似無害的JSON有效載荷:

<code class="language-json">{
   "$type": "Car",
   "Maker": "Ford",
   "Model": "Explorer"
}</code>

...可以正確地審理。但是,惡意演員可以製作針對系統類的有效負載:System.CodeDom.Compiler.TempFileCollection>

<code class="language-json">{
   "$type": "System.CodeDom.Compiler.TempFileCollection",
   "BasePath": "%SYSTEMDRIVE%",
   "KeepFiles": "False",
   "TempDir": "%SYSTEMROOT%"
}</code>

,一個可序列化的臨時文件的可序列化類具有最終確定器,可在垃圾收集時刪除文件。 惡意有效載荷可以將此終點指向受害者係統上的任意文件,從而導致無意外的文件刪除而沒有用戶交互。 這只是一個例子。許多其他系統類可以以相似的方式利用。 TempFileCollection>

因此,從具有

>的外部來源進行啟用的JSON時,請始終使用SerializationBinder>啟用這些風險。 僅允許您明確信任和控制的類型進行絕對化。 TypeNameHandling>

以上是Newtonsoft JSON的Typenamehandling是否可以安全地闡明外部JSON數據?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn