fastjson大家一定都不陌生,它是阿里巴巴的开源一个JSON解析库,通常被用于将Java Bean和JSON 字符串之间进行转换。但是在使用fastjson的过程中,我们发现存在漏洞安全隐患,因此开启安全模式很重要,那下面我们就给大家讲一下fastjson如何开启安全模式?
打开SafeMode功能,在1.2.68之后的版本,在1.2.68版本中,fastjson增加了safeMode的支持。safeMode打开后,完全禁用autoType。所有的安全修复版本sec10也支持SafeMode配置。
有三种方式配置SafeMode,如下:
1. 在代码中配置
ParserConfig.getGlobalInstance().setSafeMode(true);
注意,如果使用new ParserConfig的方式,需要注意单例处理,否则会导致低性能full gc。
2. 加上JVM启动参数
-Dfastjson.parser.safeMode=true
如果有多个包名前缀,用逗号隔开
3. 通过fastjson.properties文件配置。
通过类路径的fastjson.properties文件来配置,配置方式如下:
fastjson.parser.safeMode=true
fastjson实现原理是怎样的?
1.序列化:通过asm 获取对象上的属性的get方法集合,然后通过调用相应的方法拼装出json字符串。
2.反序列化:通过asm 获取对象上的属性的set方法集合,然后调用set方法集合,赋值到相应的属性。所有的parser基本上都需要做词法处理,json也不例外。fastjson词法处理的时候,使用了基于预测的优化算法。比如key之后,最大的可能是冒号":",value之后,可能是有两个,逗号","或者右括号"}"。
3.封装了ASM,直接操作java类文件,获取要序列化和反序列化的类的属性方法,get set 等。
4.实现了一个类似StringBuffer的可以append的对字符串操作的类。实现了Appendable接口。
SerializeWriter功能和StringBuffer类似。里面增加了ThreadLocal变量来存储char[]buf 数组,减少对内存的分配与回收。提供一些针对性的方法减少数组越界检查。
另外,Fastjson具有速度快、使用广泛、使用简单等特点,并且可以操作任何Java对象,不过Fastjson存在漏洞安全隐患,因此开启安全模式还是很有必要的!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: