模拟登录新手入门教程

阅读本文,你能得到一些Cookie和Session的基本知识,模拟登录的分析思路,但是具体代码请自行实现。

今天早上起来折腾了一下模拟登录,主要是以前从来没干过,以为很有难度——实际上并没有,折腾了大概一到两个小时就完全搞定了。

这次讲的主要是分析的思路,因为代码太难看了所以暂时不提供代码,等好看了在放出。

我们以上海海事大学数字校园平台为例,主要是他是比较简单的系统,为什么说简单,之后我们会做说明。

首先,我们来说一下本次使用的道具:

Firefox + Firebug
Postman
Node.js+superagent+cheerio(本文不需要)

之所以选择这些,是因为他们能让我们的测试和开发极大的简单化,当然你也可以使用类似的道具去做。

在模拟登陆之前,我们要先清楚一点:服务器是怎么判断用户登录状态的——如果你曾经开发过网页,一定会很快告诉我:用Session。

那么服务器又是怎么确定Session和客户端的呢,答案是Cookie,我们摘取一张图解HTTP的图来说明问题:

14632833866511.jpg

这张图非常好的说明了Cookie与Session的关系,明白了这一点,我们也就明白我们的中心主旨了:就是获取Cookie。

下一步,我们就来针对HTTP请求进行人工查看。

首先,来了解一下Firebug的使用(如果你不会呼出Firebug/审查元素面板,那你可能不在本文的读者受众中,请先去学习一些基础知识)

2016-05-15 at 11.26.png

2016-05-15 at 11.39.png

我们可以通过HTML按钮来过滤CSS和JavaScript请求,专注于页面加载本身,然后我们看到了Response中的Set-Cookie,在首次访问时,才会在响应头有这一项,这是由Cookie的特性决定的(所以方便起见我开了隐私预览窗口):

关于这一点,我们也可以看图解HTTP的图:

首次访问:

14632841880493.jpg

之后访问:

14632842181550.jpg

接下来我们来试试登录:

2016-05-15 at 11.51.png

等待完全载入完毕,我们会发现多了很多请求,一一来进行分析,主要还是看Request和Response,传入和返回的值的变化等。

这里我们从login开始,主要看三个面板:

2016-05-15 at 11.54-1.png

2016-05-15 at 11.55.png

2016-05-15 at 11.56.png

注意:由于前面我们说明过,登录的关键在于Cookie,所以Cookie不能随便泄露(因此此处打上各种马赛克)。

这里新的Set-Cookie我们不确定有没有用,我们看之后请求头的Cookie信息,现在我们先从这里看出来了,要发什么信息(Post),用什么类型(Content-Type),登录成功会返回什么(响应),这里我们用Postman试试。

2016-05-15 at 12.03.png

注意红色框出来的Content-Type。

然后我们Send之后会发现……咦,失败了——原因是lt不明,回到登录前的页面,我们去寻找lt是从什么地方传入的:

2016-05-15 at 12.06.png

看得出来,多半是一个随机校验码,这个未使用过的,我们把它复制进去,结果是可以的,与我们手动登录的返回内容相同。

但是我们记得,之后还有一个302跳转和一个200,才到了我们最终的目的地,接下来开始考证他们是否有用。

先看我们目的地的Cookie:

2016-05-15 at 12.10.png

似乎与首页的有些不太一样?

那么我们就怀疑是否是在跳转后的访问时顺便附带了点什么。

2016-05-15 at 12.13.png

我们成功找到了Cookie的来源,顺便一提,是用post中响应结果的跳转去获得的。

之后带着这个Cookie,我们能否成功访问,测试一下就知道了(答案是可以哟)

为什么带着Cookie仍然需要测试,这是由于为了避免爬虫、机器登录等情况,一些网站会进行验证User-Agent(比较常见),Referer等行为,此时我们需要对这些也进行设置,才能成功访问。

总结一下,我们这里教大家的其实是一个寻找答案的过程,当然,这是一个最简单的模拟登录,非常适合练手,如果遇到验证码,或者其他复杂情况,就不难么好做了。

superagent和cheerio的用法,这里暂时就不多做解释了,官方文档写的非常明白。

在模拟登录之后,我们就能做很多事情了,其中包括了自己做API、深度爬虫等等,诸君各凭脑洞,想象空间还是很大的。

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 知识, 使用

已有 8 条评论

  1. evercx

    你是怎么得到最终Cookie的来源的??我在跳转的响应头里没有set-cookie这个字段 不过url里却有jessionid(#゚Д゚)?

    1. 见文中对于Cookie原理讲解部分

  2. 好文~

  3. 小虫子

    为什么同一段带参数的URL,用postman可以登录成功,然而在我自己的代码里面却失败呢?这个一般是什么原因呢?请楼主指点下。

    1. 你好,POSTMAN会在运行POST后存储你的Cookie进他的Cookie List,之后你GET操作时POSTMAN会自动带上这部分的Cookie,你操作的时候需要人工设置Cookie。

      1. 小虫子

        我是这样来模拟的:先在chrome中清掉所有的cookie,然后再在postman中模拟发包,在URL中填写正确的参数之后,postman可以自动登录到目标网站并且拿到我要的信心,但是我自己的代码,却失败。即便我将cookie和header设置成跟postman一样,也失败

        1. 你自己的代码中Cookie取到了吗

  4. bob

    好文

添加新评论