php禁止网页抓取(PHP代码找到如下类似位置,重启Apache即可:找到 )
优采云 发布时间: 2021-11-20 00:14php禁止网页抓取(PHP代码找到如下类似位置,重启Apache即可:找到
)
找到如下类似的位置,按照如下代码添加/修改,然后重启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
vimagent_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;
}
然后,在网站位置/{在相关配置中插入以下代码:
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被屏蔽了:
因此,对于垃圾蜘蛛的采集,我们可以通过分析网站的访问日志,找出一些我们之前没有见过的蜘蛛的名字。查询无误后,我们可以将它们添加到前面代码的禁止列表中,起到禁止爬取的作用。
五、附录: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 无用爬虫