1. 基于 User-Agent 的爬虫识别
合法搜索引擎的爬虫通常会携带明确的 User-Agent 标识,例如 Googlebot、Baiduspider 和 Bingbot。通过识别这些合法的 User-Agent,可以允许它们访问,同时屏蔽其他爬虫。
实现方式:修改 .htaccess
文件
在 WordPress 网站根目录下的 .htaccess
文件中添加以下代码:
<IfModule mod_rewrite.c>
RewriteEngine On
# 允许合法爬虫访问
RewriteCond %{HTTP_USER_AGENT} (Googlebot|Bingbot|Baiduspider) [NC]
RewriteRule .* – [L]
# 屏蔽其他爬虫
RewriteCond %{HTTP_USER_AGENT} (curl|wget|python|scraper|spider|bot) [NC]
RewriteRule .* – [F,L]
</IfModule>
第一段代码允许合法爬虫(如 Googlebot、Bingbot 和 Baiduspider)访问,第二段代码屏蔽常见的恶意爬虫(如 curl
、wget
和其他带有 bot
的 User-Agent)。
2. 验证合法爬虫的 IP 地址
一些恶意爬虫可能伪装成合法爬虫(例如伪装成 Googlebot)。为了确保只允许真正的合法爬虫,可以通过验证 IP 地址来进一步过滤。首先获取合法爬虫的 IP 段,例如 Googlebot 的 IP 段可以参考 Google官方文档。
实现方式:PHP 脚本
在 functions.php
中添加以下代码:
function is_valid_crawler($user_agent, $remote_ip) {
$allowed_crawlers = [
'Googlebot' => '.googlebot.com',
'Bingbot' => '.search.msn.com',
'Baiduspider' => '.baidu.com',
];
foreach ($allowed_crawlers as $crawler => $host_suffix) {
if (stripos($user_agent, $crawler) !== false) {
$host = gethostbyaddr($remote_ip);
if ($host && substr($host, -strlen($host_suffix)) === $host_suffix) {
return true; // 合法爬虫
}
}
}
return false; // 非法爬虫
}
add_action('init', function() {
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$remote_ip = $_SERVER['REMOTE_ADDR'];
if (!is_valid_crawler($user_agent, $remote_ip)) {
wp_die('403 Forbidden');
}
});
此代码会检查访问者的 User-Agent 和 IP 地址,确保只有合法爬虫可以访问。
3. 配置 robots.txt
文件
通过 robots.txt
文件,明确告知合法爬虫允许或禁止访问的内容。虽然恶意爬虫通常不会遵守 robots.txt
,但这是一个必要的步骤。
示例 robots.txt 文件
User-agent: Googlebot
Disallow:
User-agent: Bingbot
Disallow:
User-agent: Baiduspider
Disallow:
User-agent: *
Disallow: /
Googlebot、Bingbot 和 Baiduspider允许访问所有内容,其他爬虫禁止访问任何内容。将此文件保存到 WordPress 网站根目录下。
4. 使用 Cloudflare 防火墙
Cloudflare 提供强大的爬虫管理功能,可以自动识别合法爬虫,并拦截其他爬虫。登录 Cloudflare 仪表盘,进入防火墙规则,设置允许合法爬虫的规则(如 User-Agent 包含 Googlebot、Bingbot 或 Baiduspider),同时屏蔽其他爬虫。
5. 限制频繁访问
即使是合法的爬虫,也可能因过于频繁的访问导致服务器压力过大。可以通过限制访问频率来保护网站。
Nginx 配置
limit_req_zone $binary_remote_addr zone=crawler:10m rate=1r/s;
server {
location / {
limit_req zone=crawler burst=5 nodelay;
}
}
每秒允许单个 IP 发送 1 个请求,超出部分将被拒绝。
6. 添加 JavaScript 验证
许多恶意爬虫不会加载 JavaScript,可以通过简单的 JavaScript 验证来阻止它们。
代码示例
在页面头部添加以下代码:
<script>
if (!navigator.userAgent || navigator.userAgent.includes('bot')) {
window.location.href = '/403.html';
}
</script>
7. 实时监控与日志分析
通过实时监控工具(如 Wordfence 或服务器日志),分析访问流量来源,发现异常后及时更新屏蔽规则。Wordfence 插件可以设置防火墙规则,允许 Googlebot、Bingbot 和 Baiduspider,同时屏蔽频繁访问的其他爬虫。