抓包的工具有很多囤捻,瀏覽器的開(kāi)發(fā)者工具臼朗、Fiddler、Wireshark等等蝎土,這里以Chrome的開(kāi)發(fā)者工具舉例依溯。
刪除Cookies
方便分析,我們先打開(kāi)開(kāi)發(fā)者工具瘟则,將博客園的cookie刪除
登錄頁(yè)Cookie
博客園的登錄頁(yè)面是https://passport.cnblogs.com/user/signin黎炉,直接訪問(wèn)這個(gè)頁(yè)面,然后看網(wǎng)絡(luò)請(qǐng)求
可以看到先訪問(wèn)了https://passport.cnblogs.com/user/signin醋拧,狀態(tài)碼是302慷嗜,又重定向到https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1,還是這個(gè)頁(yè)面丹壕,只是多加了參數(shù)AspxAutoDetectCookieSupport=1
庆械,分別看這兩個(gè)請(qǐng)求的返回內(nèi)容
訪問(wèn)第一個(gè)請(qǐng)求時(shí)服務(wù)器向?yàn)g覽器返回了 AspxAutoDetectCookieSupport
和 SERVERID
兩個(gè)Cookie,而第二個(gè)請(qǐng)求菌赖,也是返回了 SERVERID
這個(gè)Cookie缭乘,暫時(shí)認(rèn)為這個(gè)請(qǐng)求對(duì)我們沒(méi)有幫助
登錄請(qǐng)求
輸入賬號(hào)密碼,然后點(diǎn)登錄琉用,看請(qǐng)求的報(bào)文
有幾個(gè)需要注意的地方
-
Content-Type
使用了application/json的方式 - 登錄頁(yè)返回的兩個(gè)Cookie要帶上
- 有個(gè)
VerificationToken
頭 - 賬號(hào)密碼的參數(shù)分別是
input1
和input2
堕绩,并且做了加密處理,remember
是記住密碼 - 實(shí)踐發(fā)現(xiàn)
X-Requested-With
也是必須的邑时,否則登錄報(bào)錯(cuò)
要知道VerificationToken
和input1
奴紧、input2
值的由來(lái),我們定位到登錄按鈕的事件
調(diào)用了signin_go
函數(shù)晶丘,找到這個(gè)函數(shù)黍氮,看它所做的事情
代碼很清晰,到這里浅浮,除去驗(yàn)證碼的部分沫浆,結(jié)合請(qǐng)求報(bào)文,登錄的過(guò)程已經(jīng)很清楚了
- GET請(qǐng)求https://passport.cnblogs.com/user/signin頁(yè)面滚秩,拿到
AspxAutoDetectCookieSupport
和SERVERID
兩個(gè)Cookie - 使用了 JSEncrypt 根據(jù)RSA公鑰加密用戶名與密碼作為
input1
专执、input2
參數(shù) - 設(shè)置請(qǐng)求頭
ContentType
和VerificationToken
還有X-Requested-With
,并帶上前面兩個(gè)Cookie - 將
input1
叔遂、input2
他炊、remember
轉(zhuǎn)換為json,發(fā)送POST請(qǐng)求已艰,返回的JSON數(shù)據(jù)success為true表示登錄成功 - 登錄成功后返回
.CNBlogsCookie
Cookie痊末,也就是用戶身份的Cookie
模擬登錄
為了驗(yàn)證我們的分析,使用Postman工具模擬一下登錄的過(guò)程
設(shè)置4個(gè)必要的請(qǐng)求頭
因?yàn)镃ontent-Type是application/json方式哩掺,所以表單使用raw
凿叠,填入登錄的json參數(shù)
然后提交,返回了登錄成功的JSON