首页 >后端开发 >C++ >Newtonsoft JSON的Typenamehandling是否可以安全地阐明外部JSON数据?

Newtonsoft JSON的Typenamehandling是否可以安全地阐明外部JSON数据?

Susan Sarandon
Susan Sarandon原创
2025-01-31 16:31:09456浏览

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