安全处理 Newtonsoft JSON 中的 TypeNameHandling
在 JSON 序列化和反序列化的过程中,谨慎处理 TypeNameHandling 至关重要,尤其是在处理外部数据源时。
TypeNameHandling.All 虽然方便了反序列化过程中的类型推断,但也存在安全风险。当反序列化来自不受信任来源的 JSON 时,此设置允许 Newtonsoft Json 创建元数据中指定的任意类型的实例。
潜在危险:
攻击者可以发送包含 $type 属性的恶意 JSON,该属性引用可能具有破坏性的类型,例如 System.CodeDom.Compiler.TempFileCollection。此类型在垃圾回收期间可以自动删除受害者系统上的文件,从而危及文件完整性。
示例:
考虑以下恶意 JSON 有效负载:
{ "$type": "System.CodeDom.Compiler.TempFileCollection", "BasePath": "%SYSTEMDRIVE%", "KeepFiles": "False", "TempDir": "%SYSTEMROOT%" }
如果在没有适当的安全措施的情况下反序列化此 JSON,则将实例化 TempFileCollection 类型并尝试根据指定的参数删除文件。
缓解措施:
为了降低这种风险,在使用 TypeNameHandling.All 反序列化时,必须使用自定义 SerializationBinder 验证传入的类型。此绑定器可以在构造实例之前验证引用的类型的安全性。
以上是如何在Newtonsoft JSON中安全地处理Typenamehandling以防止避免攻击?的详细内容。更多信息请关注PHP中文网其他相关文章!