美文网首页
挑战GlidedSky爬虫系列(1)—自动登录

挑战GlidedSky爬虫系列(1)—自动登录

作者: Jkanon | 来源:发表于2019-06-22 16:36 被阅读0次

    前言

    最近正在开发一款通用的垂直型爬虫系统:代号WebMagician(开源计划中,有兴趣的可以mark),又恰巧在微信公众号上看到了这么一个集合了一些常见爬虫场景作为试题的网站。顿时摩拳擦掌,跃跃欲试,心想将这些题目过一遍,顺便作为这套系统的试金石,及时补缺补漏。

    正文

    0x01 正文分析

    注册网站(http://glidedsky.com
    )之后,我们发现所有的题目都是需要登录之后才能查看,因此在我们踏上新世界的征程之前,我们需要拿到入场券以打开这扇大门。现在我们就顺着思路一步一步往下走。

    1、 登录协议分析

    这里采用chrome浏览器进行分析,按住ctrl+shift+i(或者F12)打开开发者控制面板,在登录框中输入用户名密码后点击登录,此时我们在network页面面板就可以看到登录请求了。


    登录地址.png
    请求参数.png

    这里我们成功地看到了请求地址,请求方法以及请求数据。同时意外地发现密码竟然是明文传输的,倒也省去不少的分析时间(PS:一般网站的密码都是经过相应的加密方式加密的,我们需要耗费大把的时间在加密技术的分析上——得从经过混淆加密后的js代码中进行分析)。有的网友已经发现了请求参数中有一个不知来路的_token,其含义和字面一个意思,是作为这次请求的凭据之一,这是web安全常见的一种套路(详情可百度csrf相关内容)。
    根据经验,这一数据大多都是隐藏在页面的某一角落或者作为cookie(storage)的一部分保存下来。不用慌,我们按部就班,逐步探索。简单地在页面源码上尝试直接搜索"token",lucky!!一击即中,发现页面上确实有两个隐藏的token,而且值都一样,任取其一即可。为了验证猜想的正确性,我们重新登录一次比对一下token的数值确定分析无误(也可以用postman工具进行模拟请求以进一步验证参数的正确性)。


    token.png

    2、获取登录凭证

    不少同学看到上一步的时候,就激动地要开始实践了,但是仔细一想,又觉得哪里不对劲。。没错,http是无状态的协议,在之后的请求中服务器如何判定你的身份呢?这里就得提到认证(authentication)和授权(authorization)的概念了,在上述登录认证之后服务器必然返回某种凭证代表着你的身份,并且之后需随身携带这个凭证才行。
    所以这里的重点在于找出凭证的存储地点和传输方式。以经验来看,传输方式使用最广的当属以下三种方式:

    • Cookie
    • Http Header
    • 请求参数(作为url的一部分)
      其中cookie应用最为广泛,幸运的是我们在上述登录请求中也看到了服务端返回了两个cookie,基本可以判定这两个cookie就是我们要找的目标了(严格来说,其中一个cookie是用于防止crsf攻击用的,但这并非我们关注的地方)


      cookie.png

    0x02 代码编写

    WebMagician是一款高度灵活的爬虫系统,我对它的定义就是"Less Code, More Power",因此用户只需少量动态代码配置(无需进行静态代码的开发编译)即可完成页面登录爬取工作。
    1、配置爬取网站信息,如网站的域名,主页,请求重试次数等
    2、配置登录验证信息
    根据表达式的布尔值来判断是否需要进行自动登录流程(即系统判断是否需要进行登录流程的依据)

    //检查是否有登录框,其中'$'代表当前上下文对象,此处即为当前页面
    $.getHtml().regex("http://glidedsky.com/login").match()
    

    3、配置登录代码
    这里主要有两个思路

    • HTTP模拟请求
    var page = site.requestUrl("http://glidedsky.com/login", {
        method: "POST",
        data: {
            //取登录框中的token数据
            "_token": page.getHtml().xpath("//input[@name=_token]/@value").get(),
            "email": "your email",
            "password": "your password"
        }
    });
    //由于登录之后服务端返回302,系统会重新提交重定向页面的post请求,此时服务端返回415错误(只支持get而非post)
    //所以此处我们直接通过是否发生重定向来判断登录成功与否
    return page.redirectLocations != null && page.redirectLocations.length > 0;
    

    其中site.requestUrl将会自动保存服务端返回的cookie,并在之后的请求中携带上cookie信息

    • 请求之前手动添加cookies
      不得不说WebMagician是一款功能强大的系统,它提供了各种完备的回调机制,此处我们只需要在爬取的页面配置上【下载前回调】,手动添加上我们在浏览器端登录之后获取到的cookie即可
    var cookies="XSRF-TOKEN=xxx;glidedsky_session=xxx;"
    site.addCookies(cookies)
    

    系统在下载页面前都会调用上述脚本设置cookie。\color{red}{PS:在下载页面前设置cookie的话则无需配置第二步[登录判断代码]}

    0x03 总结

    至此,我们梳理了一下glidedsky网站的登录分析过程,同时对WebMagician亦有了一个初步的认识。当然,上述示例也只是起到一个抛砖引玉的效果,其实你可以做的更多。例如,在添加cookie的时候配置多套cookie,自行随机设置,达到多账号爬取的目的。

    相关文章

      网友评论

          本文标题:挑战GlidedSky爬虫系列(1)—自动登录

          本文链接:https://www.haomeiwen.com/subject/vkgizqtx.html