一、fastjson是什么?
Fastjson是一个Java语言编写的高性能支持JSON格式的解析器,它可以把Json文本数据转换成Java对象、更高效的方式是将Json文本直接解析成一个Java对象。
fastjson相对于其他json解析库的优势是解析性能极快。它的特点是:
- 速度快,性能是所有Java json parser中最快的
- 功能强大,支持普通Javabean,集合,Map,日期及Enum
- 零依赖,不需要额外的依赖
二、fastjson1.2.68反序列化漏洞是什么?
在fastjson1.2.68版本之前,fastjson存在反序列化漏洞。攻击者可以通过构造特定的json字符串,使得fastjson在反序列化时执行攻击者精心构造的恶意代码,造成系统被攻击者完全控制。
三、产生fastjson1.2.68反序列化漏洞的原因是什么?
fastjson在进行反序列化的时候,会根据json字符串中的类型信息,生成相应的对象。攻击者可以构造json字符串中的类型信息,来导致fastjson生成攻击者精心构造的对象。
此外,fastjson默认情况下会开启autoType功能,即自动检测类型。攻击者可以通过构造json字符串中的type类型,来达到执行恶意代码的目的。
四、fastjson1.2.68反序列化漏洞的危害有多大?
fastjson1.2.68反序列化漏洞可能导致攻击者完全控制系统,在后期难以修复。攻击者可以在反序列化时运行任意命令,并在系统内执行其他恶意操作,例如获取系统权限、窃取数据等。因此,如果系统受到此类攻击,则可能会带来严重的安全隐患。
五、如何防范fastjson1.2.68反序列化漏洞?
1、升级fastjson版本。 fastjson官方已经修复了1.2.68版本的漏洞,升级fastjson版本是目前最有效的防范方式。
2、关闭fastjson的autoType功能。关闭fastjson的autoType功能是很好的防范fastjson1.2.68反序列化漏洞的方法。 方法是设置ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.ParserConfig; public class TestFastjson { public static void main(String[] args) { ParserConfig.getGlobalInstance().setAutoTypeSupport(false); //关闭fastjson的autoType功能 String jsonString = "{\"@type\":\"com.xxx.XXX\",\"name\":\"xxx\"}"; try { XXX obj = JSON.parseObject(jsonString, XXX.class); } catch (Exception e) { e.printStackTrace(); } } }
3、过滤特殊字符。发现存在非正常的字符或者请求,可以进行过滤特殊字符或者剔除请求,避免攻击者通过构造特殊数据串进行攻击。
六、小结
fastjson是一款非常高效的json解析器,但在1.2.68版本之前存在反序列化漏洞。攻击者可以通过精心构造json字符串来执行恶意代码,造成系统被攻击者完全控制。
防范fastjson1.2.68反序列化漏洞需要升级fastjson版本,关闭fastjson的autoType功能或者过滤特殊字符。保障系统安全是每个程序员都应该非常注重的事情。