利用cookies获取登录后的网页
2015-06-28 02:16
393 查看
众所周知,HTTP连接是无状态的,那么问题来了,怎么记录用户的登录信息呢?通常的做法是用户第一次发送HTTP请求时,在HTTP Server端生成一个SessionID,SessionID会对应每个会话的状态(比如是否登录,等等),并且将SessionID保存在浏览器的cookies中。我们登录一个网页后,打开另外一个窗口访问相同的网页不需要登录,就是因为两个网页都对应同一个cookies。
有时在做python爬虫时,需要访问登录后才可以访问的网页,利用已经登录的cookie文件就可以达到此目的。下面以迅雷网为例来做实验,实验平台为Linux。
1. 首先在Firefox浏览器端登录迅雷网,使用Firebug插件导出cookies。
2. 修改cookies的格式,假设文件名为xunlei.txt,正确的格式如下:
3. 使用python代码读取xunlei.txt,并访问登录后才能访问的网页,例如:http://dynamic.i.xunlei.com/user
下面为源代码:
4. 打印出来的代码即为我登录后,在http://dynamic.i.xunlei.com/user看到的内容。
以上的原理与CSRF攻击的原理类似,CSRF攻击的就是利用非法获得用户cookies,伪装成用户进行操作。针对这种攻击,web站点可以生成token,HTTP Server会验证每次请求的token,来避免CSRF攻击,例如Django的CsrfViewMiddleware。
但是token依然被放在了cookies中,依然可以进行CSRF攻击,只不过攻击的方式复杂了些。
有时在做python爬虫时,需要访问登录后才可以访问的网页,利用已经登录的cookie文件就可以达到此目的。下面以迅雷网为例来做实验,实验平台为Linux。
1. 首先在Firefox浏览器端登录迅雷网,使用Firebug插件导出cookies。
2. 修改cookies的格式,假设文件名为xunlei.txt,正确的格式如下:
# Netscape HTTP Cookie File. # Generated by Wget on 2015-06-27 23:54:34. # Edit at your own risk. .dynamic.i.xunlei.com TRUE / FALSE 1498494348 __utma 74633479.1276576155.1435422349.1435422349.1435422349.1 .i.xunlei.com TRUE / FALSE 1498494325 __utma 112570076.1792933177.1435422325.1435422325.1435422325.1 .dynamic.i.xunlei.com TRUE / FALSE 1435424148 __utmb 74633479.1.10.1435422349 .i.xunlei.com TRUE / FALSE 1435424125 __utmb 112570076.1.10.1435422325 .dynamic.i.xunlei.com TRUE / FALSE 1498494348 __utmc 74633479 .i.xunlei.com TRUE / FALSE 1498494348 __utmc 112570076 .i.xunlei.com TRUE / FALSE 1435422925 __utmt 1 .dynamic.i.xunlei.com TRUE / FALSE 1451190348 __utmz 74633479.1435422349.1.1.utmcsr=i.xunlei.com|utmccn=(referral)|utmcmd=referral|utmcct=/login.html .i.xunlei.com TRUE / FALSE 1451190325 __utmz 112570076.1435422325.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) dynamic.i.xunlei.com FALSE / FALSE 1498494348 __xltjbr 1435422347556 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
下面为源代码:
import cookielib, urllib2 cookie = cookielib.MozillaCookieJar() cookie.load("xunlei.txt") handle=urllib2.HTTPCookieProcessor(cookie) opener = urllib2.build_opener(handle) urllib2.install_opener(opener) url = "http://dynamic.i.xunlei.com/user" req = urllib2.Request(url) response = urllib2.urlopen(req) print response.read()
4. 打印出来的代码即为我登录后,在http://dynamic.i.xunlei.com/user看到的内容。
以上的原理与CSRF攻击的原理类似,CSRF攻击的就是利用非法获得用户cookies,伪装成用户进行操作。针对这种攻击,web站点可以生成token,HTTP Server会验证每次请求的token,来避免CSRF攻击,例如Django的CsrfViewMiddleware。
但是token依然被放在了cookies中,依然可以进行CSRF攻击,只不过攻击的方式复杂了些。
相关文章推荐
- JSONObject与JSONArray的使用
- unity, 不要试图用rigidbody.Sleep()停止rigidbody
- iOS加入百度地图的几个问题
- Quartz2D
- 动态创建Layout
- Android点击—20150628【附带讲解IOS和娜姐界面】
- Android Studio导入第三方类库的方法
- JS的碰撞周期移动
- 使用多态来实现数据库之间的切换
- 1001--数据库的隔离级别
- 关于Toast在页面重复显示,非本页面显示
- JSON处理
- Arduino MPU6050学习资料总结
- InternetSetOption timeout
- 编写多进程程序 --多进程编程
- Glibc configure error: The arm is not supported.
- LeetCode Maximum Subarray
- shell学习指南-阅读笔记
- 数理逻辑量词的引入
- 触屏插件