外部 JSON 会因为 Json.Net TypeNameHandling Auto 而变得脆弱吗?
问题:
在用户上传自定义 JSON 对象的网站应用程序中,必须意识到出现的潜在威胁来自自动 JSON 类型反序列化。问题是,如果反序列化的唯一类型是特定类型(例如 MyObject)并且 MyObject 的所有成员都不具有 System.Object 或动态类型,那么自动类型反序列化是否容易受到漏洞的影响。
答案:
虽然遵守这些条件可以显着降低风险,但并不能保证完全保护。 Json.Net 的 TypeNameHandling 设置为 Auto 时,即使 MyObject 中不存在相应字段,也有可能根据“$type”信息创建对象。
详细说明:
针对 Json.Net 的攻击利用 TypeNameHandling 设置来构造“攻击小工具”——旨在危害接收系统的对象。 Json.Net 的保护机制包括忽略未知属性和检查类型兼容性。然而,在某些情况下,即使没有任何明显的非类型化成员,也可以构造攻击小工具:
建议:
总之,虽然所提供的条件可以显着降低风险,但值得注意的是,它并不能保证完全的安全性。 Json.Net 的 TypeNameHandling Auto 设置仍然可能有利于攻击小工具的创建,因此需要采取额外的预防措施,例如自定义序列化绑定器。
以上是即使将反序列化限制为特定类型,使用 Json.Net 的'TypeNameHandling.Auto”自动 JSON 反序列化是否安全?的详细内容。更多信息请关注PHP中文网其他相关文章!