php模拟getua_Apache/Nginx/PHP屏蔽垃圾UA爬虫的方法

本文介绍了如何使用Apache、Nginx和PHP设置规则,以阻止如FeedDemon、CrawlDaddy等垃圾用户代理(UA)爬虫对网站的访问,这些爬虫通常对服务器造成负担且不遵守robots协议。通过修改Apache的.htaccess或httpd.conf,Nginx的配置文件,以及在PHP中检查UA,可以有效地限制这些无用爬虫的活动。
摘要由CSDN通过智能技术生成

最近发现手上有个站点访问速度非常慢,看了nginx 日志发现有好多宜搜等垃圾的抓取记录,这些垃圾爬虫既不遵守 robots 规则对服务器造成压力,还不能为网站带来流量的无用爬虫,于是从网络上整理收集了各种禁止垃圾蜘蛛爬站的方法,留做记录,以备不时之需。

Apache

1、通过修改 .htaccess 文件

修改网站目录下的.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|DotBot|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|DotBot|Ezooms) BADBOT

Order Allow,Deny

Allow from all

Deny from env=BADBOT

可用代码(3)

如果以上两种方式会导致500错误,可以使用下面的代码。setEnvIfNoCase User-Agent "^$" bad_bot

setEnvIfNoCase User-Agent "^FeedDemon" bad_bot

setEnvIfNoCase User-Agent "^Indy Library" bad_bot

setEnvIfNoCase User-Agent "^Alex Toolbar" bad_bot

setEnvIfNoCase User-Agent "^AskTbFXTV" bad_bot

setEnvIfNoCase User-Agent "^AhrefsBot" bad_bot

setEnvIfNoCase User-Agent "^CrawlDaddy" bad_bot

setEnvIfNoCase User-Agent "^CoolpadWebkit" bad_bot

setEnvIfNoCase User-Agent "^Java" bad_bot

setEnvIfNoCase User-Agent "^Feedly" bad_bot

setEnvIfNoCase User-Agent "^UniversalFeedParser" bad_bot

setEnvIfNoCase User-Agent "^ApacheBench" bad_bot

setEnvIfNoCase User-Agent "^Microsoft URL Control" bad_bot

setEnvIfNoCase User-Agent "^Swiftbot" bad_bot

setEnvIfNoCase User-Agent "^ZmEu" bad_bot

setEnvIfNoCase User-Agent "^oBot" bad_bot

setEnvIfNoCase User-Agent "^jaunty" bad_bot

setEnvIfNoCase User-Agent "^Python-urllib" bad_bot

setEnvIfNoCase User-Agent "^lightDeckReports Bot" bad_bot

setEnvIfNoCase User-Agent "^YYSpider" bad_bot

setEnvIfNoCase User-Agent "^DigExt" bad_bot

setEnvIfNoCase User-Agent "^HttpClient" bad_bot

setEnvIfNoCase User-Agent "^MJ12bot" bad_bot

setEnvIfNoCase User-Agent "^heritrix" bad_bot

setEnvIfNoCase User-Agent "^EasouSpider" bad_bot

setEnvIfNoCase User-Agent "^DotBot" bad_bot

setEnvIfNoCase User-Agent "^Ezooms" bad_bot

Deny from env=bad_bot

2、通过修改 httpd.conf 配置文件

找到如下类似位置,根据以下代码 新增 / 修改,然后重启 Apache 即可:DocumentRoot /home/wwwroot/xxx

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|DotBot|Ezooms)" BADBOT

Order allow,deny

Allow from all

deny from env=BADBOT

Nginx

进入到 nginx 安装目录下的 conf 目录,将如下代码保存为 agent_deny.confcd /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|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|DotBot|Ezooms|^$" ) {

return 403;

}

#禁止非GET|HEAD|POST方式的抓取

if ($request_method !~ ^(GET|HEAD|POST)$) {

return 403;

}

然后,在网站相关配置中的 location / { 之后插入如下代码:[marsge@Mars_Server ~]$ cat /usr/local/nginx/conf/gowah.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;

使用:wq保存后,执行如下命令,平滑重启 nginx 即可:/usr/local/nginx/sbin/nginx -s reload

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','DotBot','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!');

}

}

测试效果

如果是 vps,那非常简单,使用 curl -A 模拟抓取即可,例如模拟 Swiftbot 蜘蛛抓取:curl -I -A 'Swiftbot' moewah.com

模拟 UA 为空的抓取:curl -I -A '' moewah.com

模拟百度蜘蛛的抓取:curl -I -A 'Baiduspider' moewah.com

如果 Swiftbot 和 UA 为空的返回代码为403,而百度蜘蛛成功返回代码200,说明配置成功生效。

垃圾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 无用爬虫

DotBot 无用爬虫(国外SEO爬虫)

参考网站

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值