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>