首页 >后端开发 >C++ >Newtonsoft JSON的TypenameHandling是否有安全风险?

Newtonsoft JSON的TypenameHandling是否有安全风险?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-31 16:36:15238浏览

Is Newtonsoft JSON's TypeNameHandling.All a Security Risk?

> newtonsoft JSON'S TypeNameHandling.All:安全含义

>

> Newtonsoft JSON的文档强烈警告不要使用从不受信任的来源中进行绝望的JSON。 本文探讨了与此设置相关的潜在安全漏洞,并概述了缓解策略。 TypeNameHandling.All

的漏洞 TypeNameHandling.All设置允许Newtonsoft JSON根据JSON有效负载中的元数据实例化类型。 尽管方便,但这会带来重大的安全风险。 攻击者可以制作恶意的json,迫使有害类型的避免化,从而导致任意代码执行。 例如,良性的JSON有效负载可能看起来像:>

但是,恶意演员可以构建针对系统级类型的有效载荷:

TypeNameHandling.All

这将导致Newtonsoft JSON创建一个

实例,并可能通过操纵

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

有效缓解:自定义
<code class="language-json">{
   "$type": "System.CodeDom.Compiler.TempFileCollection",
   "BasePath": "%SYSTEMDRIVE%",
   "KeepFiles": "false",
   "TempDir": "%SYSTEMROOT%"
}</code>

TempFileCollection>BasePath> TempDir>使用类型信息确保JSON避难所化的关键是使用自定义

。这允许严格控制避难所期间允许哪种类型,有效地防止了恶意类型的实例化。

实施自定义SerializationBinder涉及以下步骤:

创建一个实现SerializationBinder接口的类

覆盖

实施类型验证的方法。 这通常涉及检查针对白名单或黑名单的类型。SerializationBinder>

>向newtonsoft JSON Serializer注册您的自定义
  1. > IBindingSerializer 通过实施这些步骤,您可以安全地从外部来源进行JSON,同时防止潜在的有害类型实例化。 这种主动的方法大大降低了剥削的风险。

以上是Newtonsoft JSON的TypenameHandling是否有安全风险?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn