文档章节

关于反爬虫和恶意攻击的一些策略和思路

Cnlouds
 Cnlouds
发布于 2014/03/09 01:41
字数 1071
阅读 4588
收藏 32

    前段时间Guang.com经常受到恶意spider攻击,疯狂抓取网站内容,一系列机器人spam发广告,对网站性能有较大影响。

        下面我说说一些反恶意spiderspam的策略和思路。

    1. 通过日志分析来识别恶意爬虫/攻击

less guang.com_access.log | awk -F- '{print $1}' | sort | uniq -c | sort -rn | head -n 50

    首先分析access log,类聚统计出访问量前50 IP

     排除白名单IP 和正常spiderbaidugoogle...)

host 112.94.32.135 //查看可疑ip是不是baidu、google等常规爬虫。

     分析可以ip 请求时间、频率、路径等,你可以很容易发现这是否是一个spider,下面那明显是一个spider

    less access.log | grep '112.94.32.135' | less

    112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /baobei/1888476 HTTP/1.1" 200 107876 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /baobei/1922742 HTTP/1.1" 200 110053 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /u/1437104 HTTP/1.1" 200 10751 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /baobei/1733527 HTTP/1.1" 200 98099 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /u/1437105 HTTP/1.1" 200 10891 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /baobei/1646377 HTTP/1.1" 200 95527 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /u/1437106 HTTP/1.1" 200 10681 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:51 +0800] "GET /baobei/1922741 HTTP/1.1" 200 98356 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:51 +0800] "GET /baobei/1733526 HTTP/1.1" 200 97690 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:51 +0800] "GET /u/1437107 HTTP/1.1" 200 10765 "-" "Mozilla/4.0"
    112.94.32.135 - - [1/Oct/2012:00:00:51 +0800] "GET /baobei/1888475 HTTP/1.1" 200 96415 "-" "Mozilla/4.0"

     既然发现spider,当然要动用iptables来封杀这IP, 但很多时候仅仅封一个IP是不够的,因为一般爬虫都是运行在托管机房里面(多台服务器轮换)或者家里ADSL(重新拨号换IP),所以封整个C网段会直接有效得多,当然这样做有可能影响极小数正常用户访问,所以建议一段时间后重新解封这c网段。

 iptables -A INPUT -i eth0 -j DROP -p tcp --dport 80 -s 112.94.32.0/24

        以上可以写成个shell/python脚本,每天执行一次。

    2. 实时反爬虫

        过日志分析来识别恶意爬虫/攻击,无法即时屏蔽这些spider,对网站影响还是在的。再说,假如有人采用分布式的spider(几百个代理服务器一起过 来爬),网站很有可能无法访问,分析日志也不能及时解决问题。必须采取实时反爬虫策略,实时识别和封锁恶意爬虫的访问。

    实现思路:redis来记录每个IP的访问频度,在单位时间之内,如果访问频率超过一个阀值,就认为这个IP很有可疑,然后就可以返回一个验证码页面,要求用户填写验证码。如果是爬虫的话,当然不可能填写验证码,如果该IP地址短时间内继续不停的请求,则判断为爬虫,加入黑名单。

    当然判断这IP是否可疑,单单从访问频率来判断是不够的,还需要增加以下策略:

     分析referer。一般爬虫的referer 都是为空或者一个固定值。

    分析访问时间间隔。一般爬虫爬取网页的频率都是比较固定的,不像人去访问网页,间隔时间比较无规则。

     排除白名单IP地址段。

   具体redis操作:

         //score timestamp, value {referer}{request_url}{sessionId} redis> ZADD log:ip:112.94.32.135 61307510400000 "{referer}{request_url}{sessionId}" (integer) 1 //保留1个小时内log会比较合理。 redis> ZREMRANGEBYSCORE log:ip:112.94.32.135 -inf {timestamp} (integer) 1 redis> ZRANGE log:ip:112.94.32.135 0 -1

    更多Redis 的应用场景,请看Redis 在电商中的实际应用场景

后记

        有同学说,还可以根据User-Agent来屏蔽spider,但我认为这没什么意义,现在的恶意spider都已经将User-Agent伪装成普通浏览器或者正规爬虫的User-Agent了,我也不再这里提了。

    我认为,结合以上2种策略,可以很大程度打击那些恶意spider的攻击,保证网站正常运行。

本文转载自:http://kenny7.com/2012/10/anti-spider-and-attack.html

共有 人打赏支持
Cnlouds
粉丝 13
博文 95
码字总数 56136
作品 0
海淀
程序员
私信 提问
加载中

评论(3)

数据工厂V
数据工厂V
在神箭手云爬虫开发平台上可以通过设置代理IP、验证码识别等方式解决反爬虫的问题。
d
dizh
学习了~
Li_Peng
Li_Peng
分析的很好,赞一个!
云妹浅谈 | 纵深防爬的“抗战”之路

0x00 爬虫=爬数据? 之所以又提“什么是爬虫”这个老生常谈的问题,是前几天有个验证码接口被刷的用户在群里讨论防护方案,他认为这种不算是爬虫,爬数据的才叫爬虫(这里的“爬数据”指的是...

阿里云科技快讯
2018/08/30
0
0
一场无休止的战争 浅谈纵深防爬的“抗战”之路

0x00 爬虫=爬数据? 之所以又提“什么是爬虫”这个老生常谈的问题,是前几天有个验证码接口被刷的用户在群里讨论防护方案,他认为这种不算是爬虫,爬数据的才叫爬虫(这里的“爬数据”指的是...

云安全专家
2018/08/27
0
0
2018上半年互联网恶意爬虫分析:从全景视角看爬虫与反爬虫

  导语:互联网最激烈的对抗战场,除了安全专家与黑客之间,大概就是爬虫与反爬虫领域了。据统计,爬虫流量早已超过了人类真实访问请求流量。互联网充斥着形形色色的爬虫,云上、传统行业都...

FreeBuf
2018/07/20
0
0
网站安全之用户安全,数据库安全技术体系介绍

网站安全范畴里,用户的数据安全是目前网络安全中比较重要的一部分,在用户连接到网 站并传输到服务器的这个过程当中,会出现两个比较重要的网站安全 问题,也是基础用户数据的 安全考虑,第...

网站安全
2018/06/02
0
0
产品评测|阿里云入围《New Tech:Bot Management》评测报告第一阵营

目前互联网中很多批量流量都是Bot(自动化程序)所产生的。这使得恶意攻击变得更加容易,黑客利用这些自动化程序可以进行业务攻击和欺诈,例如撞库、占座、抢票、刷排名、爬取网页内容、接口...

云安全专家
2018/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

发布xxl-job executor dotnet core 执行器的实现

DotXxlJob [github][https://github.com/xuanye/DotXxlJob] xxl-job的dotnet core 执行器实现,支持XXL-JOB 2.0+ 1 XXL-JOB概述 [XXL-JOB][1]是一个轻量级分布式任务调度平台,其核心设计目标...

假正经哥哥
今天
2
0
mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
今天
3
0
Spring 事务初始化源码分析

相关文章 Spring 事务使用详解 Spring AOP 创建代理的源码解析 Spring AOP 注解方式源码解析 Spring AOP 功能使用详解 Spring 的 getBean 方法源码解析 Spring bean 创建过程源码解析 Spring...

TSMYK
今天
1
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
今天
3
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部