1. 程式人生 > >伺服器反爬蟲攻略:Apache/Nginx/PHP禁止某些User Agent抓

伺服器反爬蟲攻略:Apache/Nginx/PHP禁止某些User Agent抓

我們都知道網路上的爬蟲非常多,有對網站收錄有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守robots規則對伺服器造成壓力,還不能為網站帶來流量的無用爬蟲,比如宜搜蜘蛛(YisouSpider)。最近張戈發現nginx日誌中出現了好多宜搜等垃圾的抓取記錄,於是整理收集了網路上各種禁止垃圾蜘蛛爬站的方法,在給自己網做設定的同時,也給各位站長提供參考。

一、Apache

①、通過修改 .htaccess檔案

修改網站目錄下的.htaccess,新增如下程式碼即可(2種程式碼任選):

可用程式碼 (1):

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (^$|FeedDemon|JikeSpider|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|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) [NC]
RewriteRule ^(.*)$ - [F]

 可用程式碼 (2):

SetEnvIfNoCase ^User-Agent$ .*(FeedDemon|JikeSpider|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|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) BADBOT
Order Allow,Deny
Allow from all
Deny from env=BADBOT

②、通過修改httpd.conf配置檔案

找到如下類似位置,根據以下程式碼 新增 / 修改,然後重啟Apache即可:

DocumentRoot /home/wwwroot/xxx

SetEnvIfNoCase User-Agent ".*(FeedDemon|JikeSpider|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|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms)" BADBOT
 Order allow,deny
 Allow from all
 deny from env=BADBOT

二、Nginx程式碼

進入到nginx安裝目錄下的conf目錄,將如下程式碼儲存為 agent_deny.conf

cd /usr/local/nginx/conf

vim agent_deny.conf

#禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
 return 403;
}
#禁止指定UA及UA為空的訪問
if ($http_user_agent ~ "FeedDemon|JikeSpider|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|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
 return 403; 
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
 return 403;
}

然後,在網站相關配置中的  location / {  之後插入如下程式碼:

include agent_deny.conf;

如張戈部落格的配置:

[[email protected]_Server ~]$ cat /usr/local/nginx/conf/zhangge.conf 
location / {
 try_files $uri $uri/ /index.php?$args;
 #這個位置新增1行:
 include agent_deny.conf;
 rewrite ^/sitemap_360_sp.txt$ /sitemap_360_sp.php last;
 rewrite ^/sitemap_baidu_sp.xml$ /sitemap_baidu_sp.php last;
 rewrite ^/sitemap_m.xml$ /sitemap_m.php last;

儲存後,執行如下命令,平滑重啟nginx即可:

/usr/local/nginx/sbin/nginx -s reload

 三、PHP程式碼

將如下方法放到貼到網站入口檔案index.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','YisouSpider','jikeSpider','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");
wp_die('請勿採集本站,因為採集的站長木有小JJ!');
}else{
 foreach($now_ua as $value )
//判斷是否是陣列中存在的UA
 if(eregi($value,$ua)) {
 header("Content-type: text/html; charset=utf-8");
 wp_die('請勿採集本站,因為採集的站長木有小JJ!');
 }
}

四、測試效果

如果是vps,那非常簡單,使用curl -A 模擬抓取即可,比如:

模擬宜搜蜘蛛抓取:

curl -I -A 'YisouSpider' zhangge.net

模擬UA為空的抓取:

curl -I -A '' zhangge.net

模擬百度蜘蛛的抓取:

curl -I -A 'Baiduspider' zhangge.net

三次抓取結果截圖如下:

可以看出,宜搜蜘蛛和UA為空的返回是403禁止訪問標識,而百度蜘蛛則成功返回200,說明生效!

補充:第二天,檢視nginx日誌的效果截圖:

①、UA資訊為空的垃圾採集被攔截:

②、被禁止的UA被攔截:

因此,對於垃圾蜘蛛的收集,我們可以通過分析網站的訪問日誌,找出一些沒見過的的蜘蛛(spider)名稱,經過查詢無誤之後,可以將其加入到前文程式碼的禁止列表當中,起到禁止抓取的作用。

五、附錄:UA收集

下面是網路上常見的垃圾UA列表,僅供參考,同時也歡迎你來補充。

FeedDemon 內容採集
BOT/0.1 (BOT for JCE) sql注入
CrawlDaddy sql注入
Java 內容採集
Jullo 內容採集
Feedly 內容採集
UniversalFeedParser 內容採集
ApacheBench cc攻擊器
Swiftbot 無用爬蟲
YandexBot 無用爬蟲
AhrefsBot 無用爬蟲
YisouSpider 無用爬蟲
jikeSpider 無用爬蟲
MJ12bot 無用爬蟲
ZmEu phpmyadmin 漏洞掃描
WinHttp 採集cc攻擊
EasouSpider 無用爬蟲
HttpClient tcp攻擊
Microsoft URL Control 掃描
YYSpider 無用爬蟲
jaunty wordpress爆破掃描器
oBot 無用爬蟲
Python-urllib 內容採集
Indy Library 掃描
FlightDeckReports Bot 無用爬蟲
Linguee Bot 無用爬蟲