背景:最近 fastjson 被爆出新的远程代码执行漏洞之后,赶紧督促项目组快马加鞭去修改(吐槽:真改不动,架不住项目既多又老),鉴于项目不同,依赖的 fastjson 版本也不同,本次着重谈 fastjson 1.2.16 版本遇到的哪些问题?
兼容性:低版本没问题,高版本抛异常
一、抛问题。
摘取部分代码片段,稍加改造如下。
import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * fastjson 坑啊! * * @author 一猿小讲 */public class T { public static void main(String[] args) { JSONObject retJson = new JSONObject(); retJson.put("retCode", "0000"); retJson.put("retMsg", "Pay Succ"); List> retList = new ArrayList>(); Map retMap = new HashMap(); retMap.put("orderId", "O010000088888"); retMap.put("payerName", "张三"); retList.add(retMap); retJson.put("retList", retList); if (retJson.containsKey("retList")) { JSONArray jsonArray = retJson.getJSONArray("retList"); for (Object object : jsonArray) { JSONObject orderObject = (JSONObject) object; System.out.println("假装要执行的处理===>" + orderObject); } } }}
引入依赖(低版本):
com.alibaba fastjson 1.2.16
代码跑起来(真爽,飞一般的感觉):
假装要执行的处理===>{"orderId":"O010000088888","payerName":"张三"}
此时,把 fastjson 升级成高版本:
com.alibaba fastjson 1.2.70
代码跑起来(浪奔浪流ÿ