当前位置: 首页 > article >正文

tp6 php 用chatgpt写的防爬技术

<?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 中,可以通过安装第三方插件来实现防爬虫功能。以下是一些常用的防爬虫插件:

  1. Web 防爬虫插件:该插件可以在 ThinkPHP6 应用程序的入口文件 index.php 中加载,可以通过设置访问频率限制、IP 限制、访问时间限制等手段来防止爬虫程序的入侵。

  2. IP 防爬虫插件:该插件可以在 ThinkPHP6 应用程序的入口文件 index.php 中加载,可以通过设置 IP 限制来防止爬虫程序访问网站。

  3. 验证码防爬虫插件:该插件可以在 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


http://www.kler.cn/a/14400.html

相关文章:

  • 高效办公——Excel表格-03篇(Excel常用快捷键 以及 Excel快捷键结合公式的各种常见的办公例子)
  • webwork详细攻略,在vue中使用和加载静态文件
  • 加强人工智能共性技术研发与产业化协同发展
  • Java项目上线之云服务器环境篇(三)——MySQL的安装与配置
  • 软件测试概念篇(下)|开发模型与测试模型
  • 偏好强化学习概述
  • ajax写法和json的知识点
  • Redis高可用高性能缓存的应用系列06 - 热Key,大Key,并发竞争解决方案
  • Java_常用API
  • GNU make的官方生成依赖例子理解
  • 有手就行——基础XGBoost实战以 iris 数据集为例
  • 并发计算公式
  • 计及调度经济性的光热电站储热容量配置方法【IEEE30节点】(Matlab代码实现)
  • backward()和zero_grad()在PyTorch中代表什么意思
  • 机器学习在生态、环境经济学中的实践技术应用及论文写作
  • Python 读写 CSV 数据
  • Shiro详解(超全面)
  • 备份数据看这里,免费教你苹果手机怎么备份所有数据!
  • js常用方法
  • Auto-GPT免费尝鲜之初体验-使用攻略和总结