您的位置:首页 > 其它

数据抓取之反爬虫规则:CSRF防御处理及异步请求处理

2015-12-17 11:21 543 查看
同事在做数据抓取的时候,发现该提交的参数都提交了,但是返回的数据总是提醒“非法的请求或者超时”;我拿过来检查了半天也没见查出问题,无奈对比了下这个页面和另外一个页面的http头信息,端倪出来了,这页面http头信息多了个X-CSRF-Token的参数。这是什么东东,没见过,于是谷歌科普了一下。

简介

简单来说: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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: