文章目录

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

 

Nginx

进入/www/server/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 /www/server/nginx/conf/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.c1ke.cn

模拟百度蜘蛛的抓取:

curl -I -A ‘Baiduspider’ https://www.c1ke.cn

抓取结果截图如下:

curl -I -A 'MJ12bot' https://www.c1ke.cn
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

curl -I -A ‘Baiduspider’ https://www.c1ke.cn
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 //无用爬虫