• 利用cookies获取登录后的网页


      众所周知,HTTP连接是无状态的,那么问题来了,怎么记录用户的登录信息呢?通常的做法是用户第一次发送HTTP请求时,在HTTP Server端生成一个SessionID,SessionID会对应每个会话的状态(比如是否登录,等等),并且将SessionID保存在浏览器的cookies中。我们登录一个网页后,打开另外一个窗口访问相同的网页不需要登录,就是因为两个网页都对应同一个cookies。

      有时在做python爬虫时,需要访问登录后才可以访问的网页,利用已经登录的cookie文件就可以达到此目的。下面以迅雷网为例来做实验,实验平台为Linux。

      1. 首先在Firefox浏览器端登录迅雷网,使用Firebug插件导出cookies。

      2. 修改cookies的格式,假设文件名为xunlei.txt,正确的格式如下:

     1 # Netscape HTTP Cookie File.
     2 # Generated by Wget on 2015-06-27 23:54:34.
     3 # Edit at your own risk.
     4 
     5 .dynamic.i.xunlei.com   TRUE    /   FALSE   1498494348  __utma  74633479.1276576155.1435422349.1435422349.1435422349.1
     6 .i.xunlei.com   TRUE    /   FALSE   1498494325  __utma  112570076.1792933177.1435422325.1435422325.1435422325.1
     7 .dynamic.i.xunlei.com   TRUE    /   FALSE   1435424148  __utmb  74633479.1.10.1435422349
     8 .i.xunlei.com   TRUE    /   FALSE   1435424125  __utmb  112570076.1.10.1435422325
     9 .dynamic.i.xunlei.com   TRUE    /   FALSE   1498494348  __utmc  74633479
    10 .i.xunlei.com   TRUE    /   FALSE   1498494348  __utmc  112570076
    11 .i.xunlei.com   TRUE    /   FALSE   1435422925  __utmt  1
    12 .dynamic.i.xunlei.com   TRUE    /   FALSE   1451190348  __utmz  74633479.1435422349.1.1.utmcsr=i.xunlei.com|utmccn=(referral)|utmcmd=referral|utmcct=/login.html
    13 .i.xunlei.com   TRUE    /   FALSE   1451190325  __utmz  112570076.1435422325.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
    14 dynamic.i.xunlei.com    FALSE   /   FALSE   1498494348  __xltjbr    1435422347556
    15 dynamic.i.xunlei.com    FALSE   /   FALSE   1435424148  _s19    1435770994546b1435422324953b2bhttp%3A//dynamic.i.xunlei.com/user
    # cookies行数比较多,就不写了,有三个地方注意:
    # 1.第一行不能少,并且一个字符都不能错。
    # 2.格式要严格为(空白处为TAB):
    域 [TRUE或FALSE]  / [TRUE或FALSE]  过期时间戳  名称  内容

      3. 使用python代码读取xunlei.txt,并访问登录后才能访问的网页,例如:http://dynamic.i.xunlei.com/user

    下面为源代码:

     1 import cookielib, urllib2
     2 
     3 cookie = cookielib.MozillaCookieJar()
     4 cookie.load("xunlei.txt")
     5 handle=urllib2.HTTPCookieProcessor(cookie)
     6 opener = urllib2.build_opener(handle)
     7 urllib2.install_opener(opener)
     8 
     9 url = "http://dynamic.i.xunlei.com/user"
    10 req = urllib2.Request(url)
    11 response = urllib2.urlopen(req)
    12 print response.read()

      4. 打印出来的代码即为我登录后,在http://dynamic.i.xunlei.com/user看到的内容。

      以上的原理与CSRF攻击的原理类似,CSRF攻击的就是利用非法获得用户cookies,伪装成用户进行操作。针对这种攻击,web站点可以生成token,HTTP Server会验证每次请求的token,来避免CSRF攻击,例如Django的CsrfViewMiddleware。

      但是token依然被放在了cookies中,依然可以进行CSRF攻击,只不过攻击的方式复杂了些。

  • 相关阅读:
    OpenCL 获取Program信息
    匈牙利算法
    经常使用的webservice接口
    庞果网之高斯公式
    T4 生成实体和简单的CRUD操作
    zTree实现地市县三级级联报错(三)
    AlphaBlend
    cocos2d-x 3.0 事件处理
    rman多通道全备份脚本
    Linux下的简单好用的计算器bc
  • 原文地址:https://www.cnblogs.com/qingchen11/p/4605031.html
Copyright © 2020-2023  润新知