博客园登录请求分析

·  阅读 174

抓包的工具有很多,浏览器的开发者工具、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

登录成功

收藏成功!
已添加到「」, 点击更改