使用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);

猜你喜欢

转载自blog.csdn.net/DreamsArchitects/article/details/108532069