> 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中文网其他相关文章!