博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于反爬虫和恶意攻击的一些策略和思路
阅读量:7111 次
发布时间:2019-06-28

本文共 2766 字,大约阅读时间需要 9 分钟。

hot3.png

    前段时间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 的应用场景,请看

后记

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

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

转载于:https://my.oschina.net/u/1188877/blog/206515

你可能感兴趣的文章
利用scp 远程上传下载文件/文件夹
查看>>
Android的View坐标学习
查看>>
Windows下无窗口后台运行程序: ShellExecute
查看>>
在windows下使用OpenSSH(上)
查看>>
H5实现之登录模版的实现
查看>>
读《美丽新世界》
查看>>
第三章 spring-bean之DefaultListableBeanFactory(7)
查看>>
netty http2设计深入讲解
查看>>
一、RabbitMQ核心概念
查看>>
SQL2008导入数据库,标识规范 都否的解决办法
查看>>
learning
查看>>
kafka 基础01
查看>>
UIScrollView实现图片循环滚动
查看>>
我的友情链接
查看>>
王垠:怎样写一个解释器
查看>>
解决unicodedecodeerror ascii codec can’t decode byte 0xd7 in position 9 ordinal not in range(128)...
查看>>
Redis和Memcached的区别
查看>>
Mysql 5.7.20 源码安装笔记
查看>>
CSS选择器种类及介绍
查看>>
struts2 + form 表单上传文件
查看>>