fastjson是阿里巴巴公司出品的一个java语言编写的高性能且功能完善的JSON函数库,他采用一种“假定有序快速匹配”的算法,把JSON parse的性能提升到极致,号称是目前java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化,协议交互。Web输出、Android客户端等多种应用场景。
序列化:
JSON.toJSONString(getDataToGson())
反序列化:
JSON.parseObject(JSON_STRING).toString()
由于是java语言是互通的,因此,在以前的Android上使用时,Fastjson不可避免的引入了很多对于Android而言冗余的功能,从而增加了包的大小,很多人使用的就是标准版本的fastjson,但事实上,fastjson还存在一个专门为android定制的版本-fastjson-android。和标准版相比,Android版本中去掉了一些Android虚拟机dalvik不支持的功能,使得jar更小。 (本人并未试过)
如果对您有用请给个点赞收藏可好?
② 如何给Android工程的libs目录下的jar包附加源码
1
在Eclipse新建Android工程,里面只有一个MainActivity,在点击按钮的时候,我们想调用fastjson把一个Person对象转化成json字符串。
2
但是,如果想查看libs目录下面的fastjson-1.1.21.jar的源码是看不了的。
3
并且也没有附加源码的按钮。如果在fastjson-1.1.21.jar上点击右键->"Properties",打开Properties对话框,可以看到说:这是Android的私有类库,不允许附加源码。
4
接下来,在项目的根目录下新建libsrc目录,然后把fastjson-1.1.21-sources.jar放到libsrc下面。然后新建fastjson-1.1.21.jar.properties,放到lib下面。fastjson-1.1.21.jar.properties里面输入:
src=../libsrc/fastjson-1.1.21-sources.jar
5
重启Eclipse,然后再查看源码。
6
可以看到我们成功的把源码关联上了。需要说明的是,properties文件里面的src路径不仅仅可以是源码jar包,也可以是源码的文件夹,只需要把路径写正确就可以了。
③ Fastjson 1.83漏洞利用猜想
在不久前fastjson<1.2.83又爆出来了新的问题,详细内容可以参考 https://github.com/alibaba/fastjson/wiki/security_update_20220523 ,这篇文章主要是抛转引玉,写一种可能的利用思路,详细的利用链可能要等大佬们来给出了。
文内如有不妥之处,还请批评指正。
特定依赖存在下影响 ≤1.2.80
首先看白名单对比:
这里参考之前git上的白名单列表 https://github.com/LeadroyaL/fastjson-blacklist
像org.springframework中的基本全部从白名单中剔除了。
并且更改了判断方式,if (typeName.endsWith("Exception") || typeName.endsWith("Error"))
那么这里就可以猜测本次影响的方式,就是和被剔除的内容相关。这里用org.springframework..CannotAcquireLockException进行测试,可以发现实际上最终调用的类是Throwable。
那么如果是要找gadget的话,就需要从黑名单下手了。本文不做分析和介绍,有兴趣找gadget的话可以去研究研究。
需要使用1.2.80和1.2.83的fastjson jar包进行测试。
maven
demo:
上重点从checkAutoType开始,简单的说一下判断过程。
首先是判断safeModeMask,通常默认是不会开的。
检测黑名单
通过黑白名单的检测,就会尝试从Mapping中获取类
走到这里如果是白名单里的内容会尝试进行加载。
并且会直接拿到对应的类,不会再进行接下来的校验。
由于存在继承调用关系,所以在进行加载的时候就会加载f1283,并且会重新进行checkAutoType的判定。
检测过程中会先将expectClassFlag置为true。
接着检测黑名单内容,Mapping获取以及白名单检测无果之后会对clazz的类型进行校验。
接着会进行新一轮的检测。
检测通过之后,会进行类继承关系判断,实际上只要继承关系正确,就会直接进行反序列化。
最后的结果
如果直接使用java.lang.Throwable会直接抛出异常。
我们来跟一下可以很清楚的看到,Throwable既不是黑名单,也不是白名单,也不是mapping中的内容。
那么在流程中就会将这个类当做一个普通的类来进行处理,通过判断autoTypeSupport为未开启的状态,从而进行抛出处理。
④ 新手学java,请问我下载的JAR的文件,我怎么使用呀
不是的,那是一个jar包,封装好的类库,如果需要用到这个json提供的方法,可以把这个jar文件导入到library中才可以使用。
⑤ fastjson-1.2.6.jar 要放到哪个目录下
一般统一把jar包放在项目工程的lib目录下,然后添加到工程的build path中就可以使用了
⑥ 使用fastjson需要什么jar包
需要的jar包如图:
至于需要哪个版本的,就看你自己了
⑦ springboot 返回json问题
第一个问题
不加responsebody的话,应该是不行的,因为spring mvc的话,默认会根据controller的返回值去专映射view,加了responsebody就不会属去映射view而是直接返回到response的body里面
第二个问题
一般的restfule接口或者ajax调用,都要求返回的是json格式的字符串,这样方便解析。如果是controller里面返回的是字符串,那么response就直接将字符串返回,如果是对象,那么需要使用一些格式化工具,将java对象转为字符串在返回。所以我的认知是,fastjson啥的只是一个转换工具,跟responsebody本身没啥直接联系,只是json工具比较方便我们开发restful或者ajax接口的工具
⑧ java中的fastjson.jar从哪里下载
阿里的jar,到阿里云的maven仓库下,肯定是最完整准确的,如下地址:阿里云maven仓库
选择search"fastjson",或者view,从central中按照com/alibaba/fastjson/版本号属 找
⑨ com.alibaba.fastjson.json 在哪个jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>