#教程# 服务器反爬虫攻略 Apache/Nginx/PHP禁止非法抓取内容

前言

最近发现 nginx 日志中出现了好多 MJ12bot 等垃圾爬虫的抓取记录,导致日志体积增大,增加服务器压力。这里整理收集了网络上各种禁止垃圾蜘蛛爬站的方法,在给自己网做设置的同时,也给各位站长提供参考。

图片[1] - #教程# 服务器反爬虫攻略 Apache/Nginx/PHP禁止非法抓取内容 - 云线路

解决方法

Nginx

进入到 nginx 安装目录下的 conf 目录,将如下代码保存为 agent_deny.conf

#禁止 Scrapy 等工具的抓取
if ($http_user_agent ~* (Scrapy|HttpClient)) {
     return 403;
}
#禁止指定 UA 及 UA 为空的访问
if ($http_user_agent ~* "FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
     return 403;             
}
#禁止非 GET|HEAD|POST 方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 403;
}

然后,在网站 xxx.conf 相关配置中的 server 段插入如下代码:

include agent_deny.conf;

Apache

通过修改网站目录下的.htaccess,添加如下代码即可(2 种代码任选):

代码 (1):

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (^$|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) [NC]
RewriteRule ^(.*)$ - [F]

代码 (2):

SetEnvIfNoCase ^User-Agent$ .*(FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) BADBOT
Order Allow,Deny
Allow from all
Deny from env=BADBOT

PHP

将如下方法放到贴到网站入口文件 index.php 中的第一个 < ? php 之后即可:

//获取 UA 信息
$ua = $_SERVER['HTTP_USER_AGENT'];
//将恶意 USER_AGENT 存入数组
$now_ua = array('FeedDemon ','BOT/0.1 (BOT for JCE)','CrawlDaddy ','Java','Feedly','UniversalFeedParser','ApacheBench','Swiftbot','ZmEu','Indy Library','oBot','jaunty','YandexBot','AhrefsBot','MJ12bot','WinHttp','EasouSpider','HttpClient','Microsoft URL Control','YYSpider','jaunty','Python-urllib','lightDeckReports Bot');
//禁止空 USER_AGENT,dedecms 等主流采集程序都是空 USER_AGENT,部分 sql 注入工具也是空 USER_AGENT
if(!$ua) {
    header("Content-type: text/html; charset=utf-8");
    die('请勿采集本站,因为采集的站长木有小 JJ!');
}else{
    foreach($now_ua as $value )
//判断是否是数组中存在的 UA
    if(eregi($value,$ua)) {
        header("Content-type: text/html; charset=utf-8");
        die('请勿采集本站,因为采集的站长木有小 JJ!');
    }
}

测试抓取效果

模拟 MJ12bot 蜘蛛抓取:

curl -I -A 'MJ12bot' https://www.yunloc.com

模拟 UA 为空的抓取:

curl -I -A '' https://www.yunloc.com

模拟百度蜘蛛的抓取:

curl -I -A 'Baiduspider' https://www.yunloc.com

抓取结果截图如下:

[root@jxonesys ~]# curl -I -A 'MJ12bot' https://www.yunloc.com
HTTP/1.1 403 Forbidden
Server: nginx
Date: Thu, 22 Aug 2019 07:58:33 GMT
Content-Type: text/html
Content-Length: 146
Connection: keep-alive


[root@jxonesys ~]# curl -I -A '' https://www.yunloc.com
HTTP/1.1 403 Forbidden
Server: nginx
Date: Thu, 22 Aug 2019 07:55:35 GMT
Content-Type: text/html
Content-Length: 146
Connection: keep-aliv

[root@jxonesys ~]# curl -I -A 'Baiduspider' https://www.yunloc.com
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 22 Aug 2019 08:03:06 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.2.19
Set-Cookie: wp_xh_session_f2266ad63f05d6d9f9e0134d622e4ca4=43b6b7d802097b30e609d872ad6920df%7C%7C1566633786%7C%7C1566630186%7C%7C6ce3059d6fe1ea6acfb27796762ea655; expires=Sat, 24-Aug-2019 08:03:06 GMT; Max-Age=172800; path=/
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block

可以看出,MJ12bot 蜘蛛和 UA 为空的返回是 403 服务器没有相应标识,而百度蜘蛛则成功返回 200,说明生效!

我们还可以通过分析网站的访问日志,找出一些没见过的的蜘蛛(spider)名称,经过查询无误之后,可以将其加入到前文代码的禁止列表当中,起到禁止抓取的作用。

UA 收集

下面是网络上常见的垃圾 UA 列表,仅供参考,同时也欢迎你来补充。

FeedDemon             //内容采集
BOT/0.1 (BOT for JCE) //sql 注入
CrawlDaddy            //sql 注入
Java                  //内容采集
Jullo                 //内容采集
Feedly                //内容采集
UniversalFeedParser   //内容采集
ApacheBench           //cc 攻击器
Swiftbot              //无用爬虫
YandexBot             //无用爬虫
AhrefsBot             //无用爬虫
YisouSpider           //无用爬虫(已被 UC 神马搜索收购,此蜘蛛可以放开!)
MJ12bot               //无用爬虫
ZmEu phpmyadmin       //漏洞扫描
WinHttp               //采集 cc 攻击
EasouSpider           //无用爬虫
HttpClient            //tcp 攻击
Microsoft URL Control //扫描
YYSpider              //无用爬虫
jaunty                //wordpress 爆破扫描器
oBot                  //无用爬虫
Python-urllib         //内容采集
Indy Library          //扫描
FlightDeckReports Bot //无用爬虫
Linguee Bot           //无用爬虫
© 本站文章随意转载,但请注明出处!
THE END
点赞8 分享
评论 共6条
头像
务必使用真实的邮箱地址评论,虚假邮箱的评论将不通过审核及无回复。
提交
头像

昵称

取消
昵称表情代码图片
    • 头像陶小桃Blog0
    • 头像kangfeng0
        • 头像kangfeng0
    • 头像一个用户0