> newtonsoft json's TypeNameHandling
:外部JSON
> Newtonsoft的JSON庫提供TypeNameHandling
>用於包含類型信息的json的
使用TypeNameHandling.All
沒有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中文網其他相關文章!