Fastjson的用法
一、介绍
近日,阿里云应急响应中心监测到fastjson爆发新的反序列化远程代码执行漏洞,黑客利用漏洞,可绕过autoType限制,直接远程执行任意命令攻击服务器,风险极大。
漏洞描述:
fastjson采用黑白名单的方法来防御反序列化漏洞,导致当黑客不断发掘新的反序列化Gadgets类时,在autoType关闭的情况下仍然可能可以绕过黑白名单防御机制,造成远程命令执行漏洞。经研究,该漏洞利用门槛较低,可绕过autoType限制,风险影响较大。阿里云应急响应中心提醒fastjson用户尽快采取安全措施阻止漏洞攻击。
影响版本
fastjson <=1.2.68
fastjson sec版本 <= sec9
安全版本
fastjson >=1.2.69
fastjson sec版本 >= sec10
二、依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
三、语法
对象转json JSON.toJSONString()
直接使用JSON.toJSONString()
将对象解析成josn
json转对象 JSONObject.parseObject() JSONObject.parseArray()
假设一个Json字符串
{
\"countAll\":0,\"tomcatport\":8081,\"countCorrect\":0,\"datatime\":\"6\",\"logid\":\"202008251616401404295157\",\"requestinfo\":\"{
\\\"imei\\\":\\\"192016e9-3ab2-4849-8f41-d3a01c541ab0\\\",\\\"channelno\\\":\\\"221\\\",\\\"timestamp\\\":\\\"1598343399833\\\",\\\"subjectNum\\\":\\\"10000\\\"}\",\"requestip\":\"113.57.246.122\",\"requesttime\":\"2020-08-25 16:16:40\",\"requesttype\":\"63\",\"responsecode\":\"000000\",\"responseinfo\":\"{
\\\"data\\\":[{
\\\"address\\\":\\\"\\\",\\\"call\\\":\\\"\\\",\\\"classCode1\\\":\\\"\\\",\\\"classCode2\\\":\\\"511001\\\",\\\"classname1\\\":\\\"\\\",\\\"classname2\\\":\\\"运营商\\\",\\\"custId\\\":\\\"\\\",\\\"logo\\\":\\\"/icon/omc/1450424263860.png\\\",\\\"name\\\":\\\"中国电信\\\",\\\"type\\\":\\\"0\\\"}],\\\"errorCode\\\":\\\"000000\\\",\\\"flag\\\":false}\",\"userAgent\":\"TAS-AN00 Build/HUAWEITAS-AN00; 10\"}
我们要反序列化解析成对象,首先需要创建对象实体来接收。
通过JSONObject.parseObject()
和JSONObject.parseArray()
将字符串解析成对象或者是数组
IogItemEntity iogItemEntity = JSONObject.parseObject(record.value(), IogItemEntity.class);
Requestinfo requestinfo = JSONObject.parseObject(iogItemEntity.getRequestinfo(), Requestinfo.class);
Responseinfo responseinfo = JSONObject.parseObject(iogItemEntity.getResponseinfo(), Responseinfo.class);
List<DataEntity> dataEntities = JSONObject.parseArray(responseinfo.getData(), DataEntity.class);