一、为什么需要过滤 User-Agent?

在网络安全的大棋盘上,过滤 User-Agent 绝不是一步闲棋,它对于维护网站的稳定运行、保护数据安全以及保障用户的良好体验起着至关重要的作用。下面,我们将深入剖析为何过滤 User-Agent 不可或缺。
(一)恶意爬虫的威胁
网络爬虫本是一种按照一定规则,自动抓取万维网信息的程序,在搜索引擎优化、数据采集等领域有着广泛的应用。然而,当它们脱离了合法合规的轨道,就摇身一变成为了恶意爬虫,给网站带来诸多麻烦。恶意爬虫的威胁主要体现在以下几个方面:
- 资源占用:恶意爬虫往往不顾网站的承受能力,疯狂地发送大量请求,占用大量服务器带宽和计算资源。想象一下,你的网站原本就像一条车流量正常的道路,而恶意爬虫就如同突然涌入的大量超载卡车,导致道路拥堵不堪,正常用户的请求难以通行,网站访问速度大幅下降,甚至出现无法访问的情况。曾有一家小型电商网站,在促销活动期间,被恶意爬虫盯上,大量的爬虫请求瞬间耗尽了服务器资源,使得许多用户在结算时页面加载缓慢甚至卡顿,导致大量订单流失,给商家造成了巨大的经济损失。
- 敏感信息窃取:它们可能会在网站中肆意穿梭,抓取敏感信息,如用户的个人资料、登录凭证、配置文件等。这些信息一旦落入不法分子手中,后果不堪设想,用户的隐私将受到严重侵犯,网站的信誉也会受到极大损害。例如,一些恶意爬虫专门针对论坛和社交平台,抓取用户的联系方式、兴趣爱好等信息,用于精准的垃圾邮件发送或诈骗活动。
(二)User-Agent 的关键作用
User-Agent 作为浏览器或爬虫程序在请求网站时发送的标识信息,就像是它们的 “身份证”,包含了客户端的软件类型、版本、操作系统等丰富信息。通过分析这个 “身份证”,网站能够识别出访问者的身份,判断其是否为恶意爬虫。例如,常见的 Python 爬虫程序在发起请求时,User-Agent 中通常会包含 “Python” 字样,这就如同在告诉网站:“我是一个爬虫程序”。网站管理员可以根据这些特征,设置相应的过滤规则,将已知的恶意爬虫程序拒之门外。在应用层进行 User-Agent 过滤,就像是在网站的大门前设置了一个智能安检系统,能够精准地识别并拦截非法访问,是网站防御体系中至关重要的一环。它不仅能够有效地阻止恶意爬虫的侵扰,还能帮助网站更好地了解用户的访问来源和设备信息,从而优化网站的性能和用户体验。
二、Apache 防火墙 User-Agent 过滤配置方法
(一)通过.htaccess 文件配置(适合单个目录)
如果你只想对网站的某个特定目录进行 User-Agent 过滤,那么通过.htaccess 文件进行配置是一个不错的选择。这种方式灵活性较高,不需要对整个网站的配置文件进行修改,特别适合共享主机环境,因为在这种环境下,你可能没有权限修改服务器的全局配置文件。
1. 启用重写引擎并匹配恶意 User-Agent
首先,确保你的服务器开启了 mod_rewrite 模块,这是实现 User-Agent 过滤的关键。在网站目录下找到.htaccess 文件,如果没有则创建一个。然后,在文件中添加以下代码:
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]
这段代码的含义是:开启重写引擎后,使用 RewriteCond 指令来检查 HTTP 请求中的 User-Agent 字段。这里的正则表达式匹配了常见的恶意爬虫的 User-Agent,[NC] 表示不区分大小写匹配,确保无论是大写还是小写的相关字符都能被识别。如果 User-Agent 匹配到这些恶意爬虫的特征,就会触发 RewriteRule 指令,[F] 表示禁止访问,服务器会返回 403 Forbidden 状态码,将这些恶意请求拒之门外。
2. 验证配置效果
配置完成后,如何验证它是否生效呢?这里我们可以使用 curl 命令来模拟恶意爬虫的请求。在终端中输入以下命令:
curl -A "Feedly" yourwebsite.com
这里的-A参数用于指定 User-Agent,我们将其设置为恶意爬虫常见的 “Feedly”。如果配置生效,你应该会看到返回的结果是 403 Forbidden,这表明服务器已经成功识别并拒绝了这个恶意请求。如果返回的是正常的页面内容,那就需要检查一下配置是否正确,可能存在语法错误或者 mod_rewrite 模块未正确启用等问题。
(二)通过 httpd.conf 全局配置(适合整个站点)
如果需要对整个网站进行 User-Agent 过滤,那么在 httpd.conf 文件中进行全局配置会更加合适。这种方式可以确保所有的请求都能被统一检查和处理,提供更全面的防护。不过,修改 httpd.conf 文件需要谨慎操作,因为一旦配置错误,可能会导致整个网站无法正常运行。
1. 在配置文件中添加过滤规则
打开 Apache 的主配置文件 httpd.conf,这个文件通常位于 Apache 的安装目录下的 conf 文件夹中。找到<Directory>标签,在其中添加以下代码:
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
这段代码利用 SetEnvIfNoCase 指令,不区分大小写地检查 User-Agent 字段。如果匹配到指定的恶意爬虫 User-Agent,就会设置一个名为 BADBOT 的环境变量。后面的 Order、Allow 和 Deny 指令用于控制访问权限,先允许所有访问,然后拒绝环境变量为 BADBOT 的请求,从而实现对恶意爬虫的过滤。
2. 重启 Apache 使配置生效
修改完 httpd.conf 文件后,必须重启 Apache 服务器,新的配置才能生效。在终端中输入相应的命令来重启 Apache,不同的操作系统可能命令有所不同。例如,在 Linux 系统中,如果使用的是 systemd 管理服务,可以输入:
sudo systemctl restart httpd
如果使用的是传统的 init 系统,则可能是:
sudo service httpd restart
重启完成后,配置就会生效,整个网站都将按照新的规则对 User-Agent 进行过滤,为网站的安全运行提供坚实的保障。
三、常见恶意 User-Agent 列表及注意事项
(一)常见恶意 User-Agent
在与恶意爬虫的长期对抗中,我们需要熟知它们的 “伪装标识”,也就是常见的恶意 User-Agent。以下为大家列举一些典型的恶意 User-Agent 及其说明:
恶意爬虫标识 |
说明 |
Python-urllib |
Python 内置爬虫库,常被用于编写简单爬虫程序,部分恶意爬虫利用它进行数据窃取。许多不法分子使用 Python-urllib 编写的爬虫,在未经授权的情况下抓取电商网站的商品信息,包括价格、库存等,然后将这些数据用于不正当竞争,比如为自己的电商平台定价提供参考,扰乱市场正常价格秩序。 |
HttpClient |
Java 常用 HTTP 客户端,恶意攻击者利用其特性构建爬虫,突破网站防护获取数据。曾经有一家金融机构的网站,被使用 HttpClient 编写的恶意爬虫盯上,这些爬虫绕过网站的登录验证机制,抓取用户的投资信息和交易记录,给用户的资金安全带来了巨大隐患。 |
AhrefsBot |
网站分析工具爬虫,虽有合法用途,但也可能被滥用进行恶意采集。有些不法分子会利用 AhrefsBot 在未经网站允许的情况下,大量采集网站的文章、图片等资源,然后将这些内容搬运到其他网站,既侵犯了原网站的版权,也误导了用户。 |
CrawlDaddy |
恶意采集爬虫的典型代表,毫无节制地抓取网站内容,严重影响网站性能。一个小型的个人博客网站,由于被 CrawlDaddy 爬虫频繁访问,服务器资源被大量占用,导致正常用户访问时页面加载缓慢,甚至出现无法访问的情况,博主的心血付之东流,也失去了许多读者。 |
FeedDemon |
RSS 阅读器爬虫,可能会在获取内容时超出正常范围,造成数据泄露风险。比如它可能会抓取一些本应仅供特定用户访问的订阅内容,然后传播到其他地方,导致信息的不当扩散。 |
(二)注意事项
在进行 User-Agent 过滤时,并非 “一刀切” 地禁止所有可疑的 User-Agent 就万事大吉了,还需要注意以下几个关键方面:
- 区分合法爬虫:在拦截恶意爬虫的同时,我们必须要确保允许搜索引擎蜘蛛(如 Baiduspider、Googlebot)的 User-Agent 通过。这些搜索引擎蜘蛛对于网站的 SEO(搜索引擎优化)至关重要,它们会定期访问网站,抓取页面内容并建立索引,使得用户能够在搜索引擎中搜索到我们的网站。如果误将它们拦截,网站在搜索引擎中的排名可能会急剧下降,导致自然流量大幅减少。以百度为例,Baiduspider 会按照一定的规则和频率访问网站,如果网站对 Baiduspider 进行了不合理的限制,那么网站的页面可能无法及时被百度收录,用户在百度搜索相关关键词时,网站就很难出现在搜索结果中,这对于依赖搜索引擎流量的网站来说,无疑是致命的打击。
- 定期更新列表:恶意爬虫的开发者为了逃避检测,会不断地变化 User-Agent。所以我们需要定期从安全社区或通过对网站日志的分析来更新拦截列表。安全社区汇聚了众多网络安全专家和爱好者,他们会分享最新发现的恶意爬虫 User-Agent 信息。而网站日志则记录了所有访问网站的请求信息,通过仔细分析日志,我们可以发现那些异常的 User-Agent,将它们加入拦截列表。例如,某知名安全社区在一次安全事件中,第一时间发现了一种新型恶意爬虫的 User-Agent 特征,并迅速分享给了广大网站管理员。那些及时关注并更新了拦截列表的网站,成功抵御了该恶意爬虫的攻击,而未及时更新的网站则遭受了不同程度的数据泄露和性能影响。
- 结合其他防御:User-Agent 过滤只是网站防御体系中的一环,并不能完全解决所有的安全问题。建议结合 IP 频率限制、Referer 检查等措施,构建多层防御体系。IP 频率限制可以防止某个 IP 在短时间内发送大量请求,避免恶意爬虫通过集中请求来耗尽服务器资源。Referer 检查则可以验证请求是否来自合法的来源页面,防止恶意爬虫伪造请求。例如,一个电商网站在设置 User-Agent 过滤的基础上,结合 IP 频率限制,将同一 IP 每分钟的请求次数限制在一定范围内。同时,通过 Referer 检查,只有来自该电商网站内部页面或合法合作网站的请求才被允许访问商品详情页,有效地阻止了恶意爬虫的访问,保障了网站的稳定运行和用户数据的安全。
四、实战案例:某博客站点的反爬实践
(一)案例背景
在互联网的信息海洋中,有一个专注于技术分享的博客站点,博主凭借着深厚的技术功底和对知识的热爱,持续输出高质量的文章,内容涵盖编程语言、算法、软件开发工具等多个领域。这些优质的文章吸引了大量的读者,也引来了一些不速之客 —— 恶意爬虫。
近期,该博客站点遭遇了一波恶意爬虫的攻击。这些恶意爬虫毫无节制地抓取文章内容,导致服务器负载急剧升高。原本流畅运行的服务器,在恶意爬虫的冲击下,如同陷入泥沼的车辆,运转变得异常艰难。页面访问速度大幅下降,正常用户在访问博客时,常常需要长时间等待页面加载,甚至出现页面无法响应的情况,严重影响了用户体验。
为了找出问题的根源,博主对服务器日志进行了详细分析。通过日志可以清晰地看到,大量来自不同 IP 地址的请求,其 User-Agent 显示为 Python-urllib、HttpClient 等。这些标识表明,这些请求并非来自正常的浏览器访问,而是恶意爬虫程序发出的。Python-urllib 作为 Python 内置的爬虫库,被广泛应用于各类爬虫程序的编写,其简单易用的特性使得一些不法分子能够轻松利用它来抓取网站数据。HttpClient 则是 Java 常用的 HTTP 客户端,同样被恶意攻击者用来构建爬虫,突破网站的防护机制,获取有价值的数据。这些恶意爬虫的频繁访问,不仅占用了大量的服务器资源,还对博主的辛勤创作成果构成了严重威胁。
(二)解决方案
面对恶意爬虫的肆虐,博主决定采取措施进行反击。经过一番研究和尝试,最终确定了利用 Apache 防火墙进行 User-Agent 过滤的解决方案。具体实施步骤如下:
- 在博客根目录的.htaccess 文件中添加 User-Agent 过滤规则:博主在博客根目录下找到了.htaccess 文件,并在其中添加了一系列过滤规则。通过启用重写引擎,使用 RewriteCond 指令来匹配已知的恶意爬虫 User-Agent,如 Python-urllib、HttpClient 等。一旦匹配到这些恶意爬虫的标识,就会触发 RewriteRule 指令,返回 403 Forbidden 状态码,将这些恶意请求拒之门外。这样,恶意爬虫就无法再随意抓取博客的文章内容,有效地保护了网站的资源。
- 保留百度、谷歌等搜索引擎的蜘蛛 User-Agent:在拦截恶意爬虫的同时,博主深知搜索引擎蜘蛛对于网站的重要性。百度、谷歌等搜索引擎的蜘蛛 User-Agent,如 Baiduspider、Googlebot,是网站能够在搜索引擎中被索引和展示的关键。如果误将这些搜索引擎蜘蛛拦截,博客在搜索引擎中的排名将会受到严重影响,自然流量也会大幅减少。因此,博主在设置过滤规则时,特意保留了这些搜索引擎蜘蛛的 User-Agent,确保它们能够正常访问网站,抓取页面内容并建立索引,使得用户能够通过搜索引擎轻松找到博客的文章。
- 配置效果显著:经过上述配置后,博客站点的情况得到了明显改善。服务器负载下降了 30%,原本因恶意爬虫大量请求而不堪重负的服务器,如今终于能够轻松应对正常用户的访问。恶意请求数量减少了 80%,恶意爬虫的肆虐得到了有效遏制。网站的性能得到了保障,页面访问速度大幅提升,正常用户能够快速流畅地浏览博客文章,内容安全也得到了更好的保护。博主的辛勤创作成果不再轻易被恶意爬虫窃取,能够更好地服务于广大读者。
通过以上方法,该博客站点成功利用 Apache 防火墙高效过滤了恶意 User-Agent,在不影响正常用户和合法爬虫的前提下,提升了网站的安全性和稳定性。这一案例充分证明,合理配置 User-Agent 过滤是网站防御的基础且重要的一环。当然,User-Agent 过滤并非万能的,它只是网站防御体系中的一部分。为了更好地守护网站安全,还需要结合其他安全措施,如 IP 频率限制、Referer 检查、验证码验证等,构建一个全方位、多层次的安全防护体系,才能让网站在复杂的网络环境中稳健运行。
关于墨者安全墨者安全致力于安全防护、服务器高防、网络高防、ddos防护、cc防护、dns防护、防劫持、高防服务器、高防dns、网站防护等方面的服务,全网第一款指纹识别技术防火墙,自研的WAF指纹识别架构,提供任意CC和
DDoS攻击防御