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

同事在做数据抓取的时候,发现该提交的参数都提交了,但是返回的数据总是提醒“非法的请求或者超时”;我拿过来检查了半天也没见查出问题,无奈对比了下这个页面和另外一个页面的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页面内容如下(部分有删减)

    ....省略 从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");