- <?php
- // 设置允许访问的User-Agent列表
- $allowed_user_agents = array('Googlebot', 'Bingbot', 'Yahoo! Slurp');
- // 获取当前请求的User-Agent
- $user_agent = $_SERVER['HTTP_USER_AGENT'];
-
- // 如果当前请求的User-Agent不在允许访问的列表中,返回403禁止访问错误
- if (!in_array($user_agent, $allowed_user_agents)) {
- header('HTTP/1.1 403 Forbidden');
- exit();
- }
-
- // 设置允许访问的IP地址列表
- $allowed_ips = array('192.168.0.1', '10.0.0.1');
- // 获取当前请求的IP地址
- $ip_address = $_SERVER['REMOTE_ADDR'];
-
- // 如果当前请求的IP地址不在允许访问的列表中,返回403禁止访问错误
- if (!in_array($ip_address, $allowed_ips)) {
- header('HTTP/1.1 403 Forbidden');
- exit();
- }
-
- // 设置访问频率控制参数
- $limit = 100; // 每个IP地址的访问次数限制
- $expire = 60 * 60; // IP地址被封锁的时间,单位为秒
- $key = 'access_limit_' . $ip_address; // 缓存的键名
-
- // 从缓存中获取当前IP地址的访问次数
- $count = (int)apc_fetch($key);
- if ($count >= $limit) {
- // 如果当前IP地址的访问次数超过限制,返回429请求过多错误
- header('HTTP/1.1 429 Too Many Requests');
- header('Retry-After: ' . $expire);
- exit();
- } else {
- // 否则,增加当前IP地址的访问次数,并将其存储到缓存中
- apc_store($key, $count + 1, $expire);
- }
-
- // 如果当前请求的User-Agent、IP地址和访问频率都在允许访问的范围内,正常处理请求
- // TODO: 处理请求的代码
- ?>
以上代码中,我们在原有的User-Agent检测和IP限制的基础上,添加了访问频率控制的代码。我们使用APC(Alternative PHP Cache)作为缓存,每个IP地址的访问次数被限制为100次,IP地址被封锁的时间为1小时。如果当前IP地址的访问次数超过了限制,就返回429请求过多错误,并设置Retry-After响应头以指示客户端何时可以重试请求;否则,增加当前IP地址的访问次数,并将其存储到缓存中。
TP6方面的:
在 ThinkPHP6 中,可以通过安装第三方插件来实现防爬虫功能。以下是一些常用的防爬虫插件:
-
Web 防爬虫插件:该插件可以在 ThinkPHP6 应用程序的入口文件
index.php
中加载,可以通过设置访问频率限制、IP 限制、访问时间限制等手段来防止爬虫程序的入侵。 -
IP 防爬虫插件:该插件可以在 ThinkPHP6 应用程序的入口文件
index.php
中加载,可以通过设置 IP 限制来防止爬虫程序访问网站。 -
验证码防爬虫插件:该插件可以在 ThinkPHP6 应用程序的入口文件
index.php
中加载,可以通过添加验证码技术来防止爬虫程序的入侵。
这些插件都可以通过第三方应用商店进行安装和使用,使 ThinkPHP6 应用程序具有更好的防爬虫功能。同时,建议您在使用这些插件时,根据实际情况进行合理设置,以避免对网站访问造成不必要的影响。
Web 防爬虫插件:https://github.com/xiangling0/ThinkPHP-Web-Protector
IP 防爬虫插件:https://github.com/xiangling0/ThinkPHP-IP-Protector
验证码防爬虫插件:https://github.com/xiangling0/ThinkPHP-Captcha-Protector