部落格園登入請求分析

SunnyD發表於2017-12-14

抓包的工具有很多,瀏覽器的開發者工具、Fiddler、Wireshark等等,這裡以Chrome的開發者工具舉例。

刪除Cookies

方便分析,我們先開啟開發者工具,將部落格園的cookie刪除

刪除Cookies

登入頁Cookie

部落格園的登入頁面是passport.cnblogs.com/user/signin,直接訪問這個頁面,然後看網路請求

登入頁請求

可以看到先訪問了passport.cnblogs.com/user/signin,狀態碼是302,又重定向到passport.cnblogs.com/user/signin…,還是這個頁面,只是多加了引數AspxAutoDetectCookieSupport=1,分別看這兩個請求的返回內容

/user/signin

/user/signin?AspxAutoDetectCookieSupport=1

訪問第一個請求時伺服器向瀏覽器返回了 AspxAutoDetectCookieSupportSERVERID 兩個Cookie,而第二個請求,也是返回了 SERVERID 這個Cookie,暫時認為這個請求對我們沒有幫助

登入請求

輸入賬號密碼,然後點登入,看請求的報文

登入請求

有幾個需要注意的地方

  • Content-Type 使用了application/json的方式
  • 登入頁返回的兩個Cookie要帶上
  • 有個 VerificationToken
  • 賬號密碼的引數分別是input1input2,並且做了加密處理,remember是記住密碼
  • 實踐發現 X-Requested-With也是必須的,否則登入報錯

要知道VerificationTokeninput1input2值的由來,我們定位到登入按鈕的事件

登入按鈕事件

呼叫了signin_go函式,找到這個函式,看它所做的事情

signin_go函式

程式碼很清晰,到這裡,除去驗證碼的部分,結合請求報文,登入的過程已經很清楚了

  1. GET請求passport.cnblogs.com/user/signin頁面,拿到AspxAutoDetectCookieSupportSERVERID 兩個Cookie
  2. 使用了 JSEncrypt 根據RSA公鑰加密使用者名稱與密碼作為input1input2引數
  3. 設定請求頭ContentTypeVerificationToken 還有 X-Requested-With,並帶上前面兩個Cookie
  4. input1input2remember轉換為json,傳送POST請求,返回的JSON資料success為true表示登入成功
  5. 登入成功後返回 .CNBlogsCookie Cookie,也就是使用者身份的Cookie

模擬登入

為了驗證我們的分析,使用Postman工具模擬一下登入的過程

設定4個必要的請求頭

Postman請求頭

因為Content-Type是application/json方式,所以表單使用raw,填入登入的json引數

Postman表單

然後提交,返回了登入成功的JSON

登入成功

相關文章