数据抓取之反爬虫规则:CSRF防御处理及异步请求处理
2015-12-17 11:21
543 查看
同事在做数据抓取的时候,发现该提交的参数都提交了,但是返回的数据总是提醒“非法的请求或者超时”;我拿过来检查了半天也没见查出问题,无奈对比了下这个页面和另外一个页面的http头信息,端倪出来了,这页面http头信息多了个X-CSRF-Token的参数。这是什么东东,没见过,于是谷歌科普了一下。
那么很多网站为了应对这种请求,会采取防御措施,一般采取的措施是采取token校验,比如返回给页面A的时候会生成一个token值,然后你在A界面请求界面B的时候,如果同时提交token值并且值正确的话,就当作是正常的请求进行处理。否则则认为当前请求不正常,返回错误页面。
- 比如我用httpclient先获取A页面,A页面内容如下(部分有删减)
从A页面获取csrf token值:c385ce66-e97e-48aa-83eb-1f76a0942971,请求B地址的时候加入在请求头信息header中加入token值即可,代码如下:
httppost.addHeader( “X-CSRF-Token”,”c385ce66-e97e-48aa-83eb-1f76a0942971”);
欢迎去我的个人站点查看文章
或者,欢迎关注俺的微信订阅号,每天一篇小笔记,每天提高一点点:
公众号:enilu123
简介
简单来说:CSRF全称:Cross-site request forgery,中文翻译为跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用那么很多网站为了应对这种请求,会采取防御措施,一般采取的措施是采取token校验,比如返回给页面A的时候会生成一个token值,然后你在A界面请求界面B的时候,如果同时提交token值并且值正确的话,就当作是正常的请求进行处理。否则则认为当前请求不正常,返回错误页面。
应对方式
其实针对上述防御措施,想办法拿到token一同提交就好了,以某网站为例子:- 比如我用httpclient先获取A页面,A页面内容如下(部分有删减)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="_csrf_parameter" content="_csrf" /><meta name="_csrf_header" content="X-CSRF-TOKEN" /><meta name="_csrf" content="c385ce66-e97e-48aa-83eb-1f76a0942971" /> <link href="/skin/css/public3.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="/skin/js/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="/skin/js/gs/utils.js" ></script> <script type="text/javascript" src="/skin/js/gs/gsgs.js" ></script> <script type="text/javascript" src="/skin/js/gs/gsjyyc.js" ></script> ....省略
从A页面获取csrf token值:c385ce66-e97e-48aa-83eb-1f76a0942971,请求B地址的时候加入在请求头信息header中加入token值即可,代码如下:
httppost.addHeader( “X-CSRF-Token”,”c385ce66-e97e-48aa-83eb-1f76a0942971”);
异步请求处理
针对异步请求处理,需要在http头信息做简单处理即可:httppost.addHeader("X-Requested-With", "XMLHttpRequest");
欢迎去我的个人站点查看文章
或者,欢迎关注俺的微信订阅号,每天一篇小笔记,每天提高一点点:
公众号:enilu123
相关文章推荐
- 批处理命令按日期格式备份目录
- 从此走上一条iOS程序猿不归路。。。
- php随机获取金山词霸每日一句
- PL/SQL常用函数
- Nginx变量的源码分析
- Java线程理解
- start-activity-by-securecode
- List,Map,Entity,Object数据类型之间的转换
- fullpage全屏/整屏滚动组件简单实例Demo
- Integrate Apache storm with zookeeper in windows
- 【jQuery】replaceWith()和replaceAll()
- jdk动态代理的实现原理(参考其他文章)
- 表格视图 - 使用代码自定义行高度
- python中的参数
- checkbox 全选反选实现全代码
- 获得当地实时天气
- mysql 数据表解锁
- VS2012 Entity Framework 安装
- 2015年大二上-数据结构-数组与广义表(3)-2.稀疏矩阵的三元组表示
- clientHeight、offsetHeight 区别 笔记