Fastjson 是一个广泛使用的 JSON 解析库,由阿里巴巴开源,它主要用于 Java 对象和 JSON 数据之间的相互转换,在 fastjson 中,AutoType 特性允许在序列化时记录类型信息,并在反序列化时根据这些信息自动识别并恢复原始类型,这个特性也带来了一些安全隐患,因为攻击者可能利用 AutoType 进行反序列化攻击。
AutoType 的工作原理
当启用 AutoType 功能时,fastjson 会在序列化的 JSON 字符串中添加一个特殊的 "@type" 字段,用于存储实际对象的类名。
{ "fruit": { "@type": "com.example.Apple", "price": 0.5 }, "name": "Hollis" }
在反序列化时,fastjson 会读取这个 "@type" 字段,并根据其值动态地加载对应的类,从而将 JSON 数据正确地转换为目标对象。
AutoType 的安全风险
尽管 AutoType 提供了便利的类型识别机制,但它也带来了严重的安全风险,如果应用程序接收到恶意构造的 JSON 数据,其中包含伪造的 "@type" 字段,fastjson 可能会尝试加载并实例化不可信的类,从而导致远程代码执行等安全问题。
AutoType 的安全改进措施
为了应对这些安全风险,fastjson 采取了一系列措施来增强 AutoType 的安全性:
1、黑名单机制:引入了黑名单机制,对已知存在安全风险的类进行过滤,JSON 数据中的 "@type" 字段对应的类在黑名单中,fastjson 会拒绝反序列化并抛出异常。
2、白名单机制:除了黑名单,还引入了白名单机制,只有在白名单中的类才允许被反序列化,从而进一步限制了潜在的攻击面。
3、safeMode 配置:引入了 safeMode 配置选项,当 safeMode 开启时,无论白名单和黑名单如何设置,都不支持 AutoType,从而完全禁用了这一特性。
版本 | 发布日期 | AutoType 相关更新 |
1.2.59 | 2019-07 | 增强 AutoType 打开时的安全性 |
1.2.60 | 2019-10 | 增加 AutoType 黑名单,修复拒绝服务安全问题 |
1.2.61 | 2019-11 | 增加 AutoType 安全黑名单 |
1.2.62 | 2019-12 | 增加 AutoType 黑名单、增强日期反序列化和 JSONPath |
1.2.66 | 2020-02 | Bug 修复安全加固,补充 AutoType 黑名单 |
1.2.67 | 2020-03 | Bug 修复安全加固,补充 AutoType 黑名单 |
1.2.68 | 2020-06 | 支持 GEOJSON,补充 AutoType 黑名单,引入 safeMode 配置 |
1.2.69 | 2020-07 | 修复新发现高危 AutoType 开关绕过安全漏洞,补充 AutoType 黑名单 |
1.2.70 | 2020-08 | 提升兼容性,补充 AutoType 黑名单 |
FAQs
Q1: Fastjson 的 AutoType 功能默认是开启的吗?
A1: 不是,Fastjson 的 AutoType 功能默认是关闭的,需要显式地通过代码或配置文件来开启。
Q2: 如果我想使用 AutoType 功能,但又担心安全问题,应该怎么办?
A2: 如果确实需要使用 AutoType 功能,建议采取以下措施来降低安全风险:1. 仅在受信任的环境中使用 AutoType;2. 使用白名单机制,严格限制允许反序列化的类;3. 开启 safeMode,完全禁用 AutoType 功能(如果不需要该特性)。
小编有话说:Fastjson 的 AutoType 功能虽然方便,但使用时一定要谨慎,务必了解其工作原理和潜在的安全风险,并采取适当的安全措施来保护你的应用程序免受攻击,在处理外部输入的 JSON 数据时,始终要保持警惕,避免因疏忽而导致的安全漏洞。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1428826.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复