数据抓取之反爬虫规则: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页面内容如下(部分有删减)

    <!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
 这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值