背景
fastjson爆出重大漏洞,攻击者可使整个业务瘫痪
漏洞描述
常用JSON组件FastJson存在远程代码执行漏洞,攻击者可通过精心构建的json报文对目标服务器执行任意命令,从而获得服务器权限。此次爆发的漏洞为以往漏洞中autoType的绕过。
影响范围
FastJson < 1.2.48
最近关于fastjson的消息,引起了很多人的关注!很多开发者才猛然发现,fastjson已经深入到我们开发工作的方方面面。那么除了赶快升级你的json外,我们来挖挖fastjson最常用的用法。
fastjson常用方式
1.maven依赖(记得升级到1.2.48以上版本哦)
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>
2.FastJson对于json格式字符串的解析主要用到了一下三个类:
(1)JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
(2)JSONObject:fastJson提供的json对象。
(3)JSONArray:fastJson提供json数组对象。
3.常用方式
3.1 string和java对象
实例1:对象转json字符串
Map<String,String> map=new HashMap<String,String>(); map.put("code","0"); map.put("message","ok"); String json=JSON.toJSONString(map); System.out.println(json);
输出结果为:
{"code":"0","message":"ok"}
实例2:字符串转对象
Map<String,String> map=new HashMap<String,String>(); map.put("code","0"); map.put("message","ok"); String json=JSON.toJSONString(map); System.out.println(json); Map obj=(Map)JSON.parse(json); System.out.println("code="+obj.get("code")+",message="+obj.get("message"));
输出结果
{"code":"0","message":"ok"} code=0,message=ok
3.2 工具类JSONObject
public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>(); map.put("code","0"); map.put("message","ok"); String json=JSON.toJSONString(map); System.out.println(json); Map obj=(Map)JSON.parse(json); System.out.println("code="+obj.get("code")+",message="+obj.get("message")); String code=JSON.parseObject(json).getString("code"); String message=JSON.parseObject(json).getString("message"); System.out.println("code="+code+",message="+message); }
输出结果
{"code":"0","message":"ok"} code=0,message=ok code=0,message=ok
3.3 数组对象
List<user> list=new ArrayList<user>(JSONArray.parseArray(jsonString,user.class));