讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在ThinkPHP中识别并处理爬虫抓取_UserAgent白名单与验证码人机对抗

大萱君_9105

大萱君_9105

发布时间:2026-03-21 13:31:12

|

856人浏览过

|

来源于php中文网

原创

ThinkPHP中应通过中间件用配置文件白名单+stripos校验User-Agent实现轻量爬虫识别,仅作快速放行而非安全屏障;空UA或含python-requests等异常UA需标记限流,验证码须结合JS行为、Cookie、IP频次动态触发。

如何在thinkphp中识别并处理爬虫抓取_useragent白名单与验证码人机对抗

ThinkPHP 里怎么用 User-Agent 做基础爬虫识别

靠 User-Agent 字符串本身做“白名单”是脆弱的,但它是第一道轻量过滤——不是为了拦住所有爬虫,而是快速放过已知可信客户端(比如自家 App、合作方接口),同时标记出明显异常流量(如空 UA、含 python-requests 却走 Web 路由)。

ThinkPHP 6+ 中,request()->header('user-agent') 可取值;5.x 则用 input('server.HTTP_USER_AGENT')。别直接在控制器里硬编码判断逻辑,应抽到中间件或行为钩子中。

  • 白名单建议存在配置文件(如 app/extra/spider.php),而非数据库——避免每次请求都查库
  • 匹配用 stripos() 而非全等,因为 UA 可能带版本号、平台信息等变体
  • 注意移动端 UA(如 Mobile Safari)和桌面端(Chrome)要分开看,别把微信内置浏览器误标为爬虫
  • 空 User-Agent 或纯数字/乱码字符串(如 123456)大概率是恶意扫描器,可直接 halt() 或记录后限流

为什么不能只靠 User-Agent 就放行或拦截

因为 User-Agent 完全可伪造,主流爬虫框架(Scrapy、Playwright、Requests)默认就随机 UA,甚至能完美复刻 Chrome 最新 UA。你加了白名单,攻击者只要照抄一行字符串就能绕过。

典型翻车场景:curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" 直接打穿你的“UA 白名单”,连验证码都不触发。

立即学习“PHP免费学习笔记(深入)”;

  • 真实业务中,UA 只适合做“快速放行”(如内部系统调用),绝不该用于“放行即信任”
  • 如果某接口被高频调用且 UA 合法,但无 Cookie、无 Referer、无 JS 执行痕迹,大概率仍是爬虫
  • TP 的 think\facade\Request 不会自动校验 UA 真实性,它只是原样返回 header 值,别高估它的防护能力

验证码该在什么时候触发:别等用户点提交才弹

人机对抗的关键不是“加不加验证码”,而是“在哪个环节、对谁加”。ThinkPHP 自带的 captcha 扩展只提供生成和验证函数,不决定触发时机——这个决策必须由你控制。

推荐策略:对高风险动作(如登录、注册、批量导出)做前置风险评分,而不是固定路径强制弹验证码。

  • 首次访问页面时,通过 JS 注入一个隐藏字段(如 _ts),记录页面加载到点击的毫秒差;小于 800ms 的基本是脚本提交,直接拦截
  • 检查 request()->cookie('thinkphp_token') 是否存在且未过期——真用户有 Cookie,多数爬虫没耐心维持会话
  • 结合 IP 请求频次(可用 think\Cache 记录 ip:login:count)和 UA 变化频率,双指标超阈值再触发 captcha()
  • 验证码图片地址别写死,用 url('captcha') 动态生成,并确保路由未被 CDN 缓存(否则多个用户看到同一张图)

TP 验证码常见报错与绕过陷阱

captcha/check 返回 false 是最常遇到的问题,但原因五花八门,调试时别只盯着前端传参。

  • session_start() 失败会导致验证码 session 写入失败——确认 session.auto_start = 0,且 TP 的 session 配置项(如 type、prefix)与实际环境匹配
  • 前后端域名不一致(如前端用 https://a.com,后端接口在 https://api.b.com)时,Cookie 默认不携带,captcha/check 拿不到服务端存的验证码值
  • 验证码图片正常显示但校验总失败?检查是否启用了 ob_start() 或输出了 BOM,导致 session 写入前已有输出
  • 别在验证码校验通过后立刻清 session——有些业务需要连续操作(如多步表单),清太早会导致第二步校验失败

真正难防的不是手动填错验证码的人,而是用 OCR + 代理池轮询的自动化流程。UA 白名单和验证码只是成本门槛,不是安全边界。别把规则写死在代码里,留个开关配置项,方便灰度和紧急关闭。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

649

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

624

2025.12.18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

438

2026.03.31

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2706

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5239

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

3747

2026.03.24

免费爬虫工具有哪些
免费爬虫工具有哪些

免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4893

2023.11.10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4121

2024.04.10

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn