抓包的工具有很多,瀏覽器的開發者工具、Fiddler、Wireshark等等,這裡以Chrome的開發者工具舉例。
刪除Cookies
方便分析,我們先開啟開發者工具,將部落格園的cookie刪除
登入頁Cookie
部落格園的登入頁面是passport.cnblogs.com/user/signin,直接訪問這個頁面,然後看網路請求
可以看到先訪問了passport.cnblogs.com/user/signin,狀態碼是302,又重定向到passport.cnblogs.com/user/signin…,還是這個頁面,只是多加了引數AspxAutoDetectCookieSupport=1
,分別看這兩個請求的返回內容
訪問第一個請求時伺服器向瀏覽器返回了 AspxAutoDetectCookieSupport
和 SERVERID
兩個Cookie,而第二個請求,也是返回了 SERVERID
這個Cookie,暫時認為這個請求對我們沒有幫助
登入請求
輸入賬號密碼,然後點登入,看請求的報文
有幾個需要注意的地方
Content-Type
使用了application/json的方式- 登入頁返回的兩個Cookie要帶上
- 有個
VerificationToken
頭 - 賬號密碼的引數分別是
input1
和input2
,並且做了加密處理,remember
是記住密碼 - 實踐發現
X-Requested-With
也是必須的,否則登入報錯
要知道VerificationToken
和input1
、input2
值的由來,我們定位到登入按鈕的事件
呼叫了signin_go
函式,找到這個函式,看它所做的事情
程式碼很清晰,到這裡,除去驗證碼的部分,結合請求報文,登入的過程已經很清楚了
- GET請求passport.cnblogs.com/user/signin頁面,拿到
AspxAutoDetectCookieSupport
和SERVERID
兩個Cookie - 使用了 JSEncrypt 根據RSA公鑰加密使用者名稱與密碼作為
input1
、input2
引數 - 設定請求頭
ContentType
和VerificationToken
還有X-Requested-With
,並帶上前面兩個Cookie - 將
input1
、input2
、remember
轉換為json,傳送POST請求,返回的JSON資料success為true表示登入成功 - 登入成功後返回
.CNBlogsCookie
Cookie,也就是使用者身份的Cookie
模擬登入
為了驗證我們的分析,使用Postman工具模擬一下登入的過程
設定4個必要的請求頭
因為Content-Type是application/json方式,所以表單使用raw
,填入登入的json引數
然後提交,返回了登入成功的JSON