> newtonsoft JSON'S TypeNameHandling.All
:安全含义
> Newtonsoft JSON的文档强烈警告不要使用TypeNameHandling.All
的漏洞
TypeNameHandling.All
设置允许Newtonsoft JSON根据JSON有效负载中的元数据实例化类型。 尽管方便,但这会带来重大的安全风险。 攻击者可以制作恶意的json,迫使有害类型的避免化,从而导致任意代码执行。
例如,良性的JSON有效负载可能看起来像:
TypeNameHandling.All
实例,并可能通过操纵
和<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
>
IBindingSerializer
通过实施这些步骤,您可以安全地从外部来源进行JSON,同时防止潜在的有害类型实例化。 这种主动的方法大大降低了剥削的风险。以上是Newtonsoft JSON的TypenameHandling是否有安全风险?的详细内容。更多信息请关注PHP中文网其他相关文章!