fastjson如何开启安全模式?fastjson实现原理是怎样的?

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工具网。

推荐阅读:

struts怎么找回密码?struts如何创建password?

java线程怎么获取返回值?java线程获取返回值方法

如何用java写一个网站?Java开发一个简单网站实例