专栏首页菲宇反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

我们都知道网络上的爬虫非常多,有对网站收录有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守robots规则对服务器造成压力,还不能为网站带来流量的无用爬虫,比如宜搜蜘蛛(YisouSpider)(最新补充:宜搜蜘蛛已被UC神马搜索收购!所以本文已去掉宜搜蜘蛛的禁封!==>相关文章)。最近张戈发现nginx日志中出现了好多宜搜等垃圾的抓取记录,于是整理收集了网络上各种禁止垃圾蜘蛛爬站的方法,在给自己网做设置的同时,也给各位站长提供参考。

一、Apache

①、通过修改 .htaccess文件

二、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|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;
}

然后,在网站相关配置中的 location / { 之后插入如下代码: include agent_deny.conf; 如张戈博客的配置: [marsge@Mars_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中的第一个 <?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!');
}
}

四、测试效果

如果是vps,那非常简单,使用curl -A 模拟抓取即可,比如: 模拟宜搜蜘蛛抓取: curl -I -A 'YisouSpider' zhang.ge 模拟UA为空的抓取: curl -I -A '' zhang.ge 模拟百度蜘蛛的抓取: curl -I -A 'Baiduspider' zhang.ge

修改网站目录下的.htaccess,添加如下代码即可(2种代码任选):三次抓取结果截图如下:

可以看出,宜搜蜘蛛和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 无用爬虫(已被UC神马搜索收购,此蜘蛛可以放开!)
MJ12bot 无用爬虫
ZmEu phpmyadmin 漏洞扫描
WinHttp 采集cc攻击
EasouSpider 无用爬虫
HttpClient tcp攻击
Microsoft URL Control 扫描
YYSpider 无用爬虫
jaunty wordpress爆破扫描器
oBot 无用爬虫
Python-urllib 内容采集
Indy Library 扫描
FlightDeckReports Bot 无用爬虫
Linguee Bot 无用爬虫
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://blog.csdn.net/bbwangj复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Nginx反爬虫: 禁止某些User Agent抓取网站

    2. 设置账号登陆时长,账号访问过多封禁 设置账号的登录限制,只有登录才能展现内容 设置账号登录的时长,时间一到则自动退出

    py3study
  • 服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

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

    双面人
  • 服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

    我们都知道网络上的爬虫非常多,有对网站收录有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守 robots 规则对服务器造成压力,还不能为网站带来流...

    张戈
  • SEO分享:彻底禁止搜索引擎收录非首选域名的方法

    众所周知,绝大多数网站都会有一个首选域名,从用户体验考虑,通常站长们还会另外解析一个域名,并设置 301 重定向。例如,用户未输入 www 的时候,仍然可以访问...

    张戈
  • 使用CDN的User-Agent反爬虫(附名单)

    这几天发现CDN上的钱去的有点快,后台一查,有爬虫在后台爬了几千次,还是自己不认识的。因此如果你有用CDN的话,可以用CDN的User-Agent反爬虫。

    可定
  • Robots协议探究:如何好好利用爬虫提高网站权重

    站长们通常希望百度、Google 这样的大型搜索引擎来抓取网站内容,但又很厌恶其他来路不明的网络爬虫抓取自己的信息。

    德顺
  • SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

    最近张戈博客收录出现异常,原因并不明朗。我个人猜测存在如下几个直接原因: 更换主题,折腾时带来过多错误页面或间歇性访问错误; 直接线上折腾 Nginx 缓存和...

    张戈
  • 常见的反爬虫技术有哪些?如何防止别人爬自己的网站?

    爬虫与反爬虫是互联网开发工程师之间的斗智斗勇。作为网站开发者既要掌握爬虫的技术,还要更进一步去了解如何实现反爬虫。

    用户2781897
  • 爬虫的"盗亦有道"-Robots协议

    网络爬虫的君子协议 ? 执着 网络爬虫的尺寸 小规模,数量小,爬去速度不敏感,requests库 中规模,数据规模较大,爬取速度敏感scrapy库 大规模...

    若与
  • 利用nginx来屏蔽指定的user_agent的访问以及根据user_agent做跳转

    对于做国内站的我来说,我不希望国外蜘蛛来访问我的网站,特别是个别垃圾蜘蛛,它们访问特别频繁。这些垃圾流量多了之后,严重浪费服务器的带宽和资源。通过判断user ...

    用户1349575
  • linux学习第四十二篇:限定某个目录禁止解析php, 限制user_agent,PHP相关配置

    限定某个目录禁止解析php 虚拟主机配置文件添加的核心配置内容: <Directory /data/wwwroot/111.com/upload> ...

    用户1215343
  • 反爬虫机制和破解方法汇总

    什么是爬虫和反爬虫? 爬虫:使用任何技术手段,批量获取网站信息的一种方式。 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。 ? 常见的反...

    Python中文社区
  • 一文带你了解Python爬虫(一)——基本原理介绍

    1. 企业生产的用户数据: 大型互联网公司有海量用户,所以他们积累数据有天然的优势。有数据意识的中小型企业,也开始积累的数据。 2. 数据管理咨询公司: ...

    诡途
  • Python3网络爬虫实战-23、使用U

    利用 Urllib 的 robotparser 模块我们可以实现网站 Robots 协议的分析,本节我们来简单了解一下它的用法。

    py3study
  • 如何设置让网站禁止被爬虫收录?robots.txt

    发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113888.html原文链接:https://javaforall.cn

    全栈程序员站长
  • 只会爬虫不会反爬虫?动图详解利用 User-Agent 进行反爬虫的原理和绕过方法!

    随着 Python 和大数据的火热,大量的工程师蜂拥而上,爬虫技术由于易学、效果显著首当其冲的成为了大家追捧的对象,爬虫的发展进入了高峰期,因此给服务器带来的压...

    崔庆才
  • Python入门网络爬虫之精华版

    首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫

    IT派
  • 网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)

    有时候你会发现,你在搜索引擎输入网站名称的时候,出来的网站信息是你们的,但是域名却是一个陌生的,这种情况可以基本确定网站被镜像了,那么究竟什么叫网站被镜像?

    砸漏

扫码关注腾讯云开发者

领取腾讯云代金券