如何秒级识别80+爬虫与机器人:express-useragent的isBot检测与防误报技巧
如何秒级识别80爬虫与机器人express-useragent的isBot检测与防误报技巧【免费下载链接】express-useragentNodeJS user-agent middleware项目地址: https://gitcode.com/gh_mirrors/ex/express-useragentexpress-useragent 是一款 Node.js 的 User-Agent 解析中间件内置isBot 机器人识别能力可以在一次请求内判断访问者是搜索引擎爬虫、社交媒体爬虫还是普通浏览器并帮你避开最常见的误报坑——把真实用户当成机器人拦截。无论你是给 Express 网站加限流、做反爬分析还是只想在日志里看清流量来源这套方案都足够轻量。为什么每个网站都需要爬虫识别 ️你的服务器日志里可能每天都是这样的混战SEO 爬虫Googlebot、Baiduspider、bingbot、yandexbot 等决定你的搜索收录社媒抓取facebookexternalhit、twitterbot、telegrambot用来生成链接预览卡片监控探针Pingdom、UptimeRobot、screaming frog 等探测你的站点健康恶意采集以 python、curl、go-http-client 等客户端身份出现的抓取脚本靠人工写正则去匹配这几十上百种身份既容易漏检漏掉新爬虫又容易误伤把 TikTok 内置浏览器当成 Google 爬虫。express-useragent 把这件事封装成了一个布尔字段isBot。三步上手给 Express 加上 isBot 检测安装只需一条命令要求 Node.js 18npm install express-useragent在 Express 应用中挂上中间件请求对象上就会出现完整的解析结果import express from express; import { express as useragent } from express-useragent; const app express(); app.use(useragent()); app.get(/, (req, res) { res.json({ isBot: req.useragent?.isBot, // true / false botName: req.useragent?.botName, // 命中的爬虫标识如 googlebot browser: req.useragent?.browser, os: req.useragent?.os, }); });运行仓库自带的演示服务可以直接观察每个请求的解析结果npm run express完整的可运行示例见 examples/server.ts中间件实现位于 src/index.ts。isBot 判定原理80 爬虫模式表是如何工作的识别逻辑的核心是一张爬虫模式表BOTS收录了 80 多条正则模式从googlebot、baiduspider到curl、python、semrushbot再到底层 HTTP 客户端go-http-client、node-superagent。const IS_BOT_REGEXP new RegExp((${BOTS.join(|)}), i);关键设计有两点大小写不敏感末尾的i标志GoogleBot与googlebot都能命中记录命中来源命中后不仅isBot true还会把匹配到的标识写入botName方便你按爬虫点名处理而不是只拿到一个笼统的 true。模式表定义在 src/express-useragent.ts判定逻辑见testBot()方法src/express-useragent.ts。覆盖不到的无名爬虫怎么办很多非浏览器客户端的 UA 不以Mozilla开头例如PostmanRuntime/7.28.4、sockbot/3.1.0。这类请求会被标记为非权威 UAisAuthoritative: false此时 isBot 判定退化为宽松规则只要字符串里出现bot字样就算机器人宁可多疑、不漏判。isBot 返回结果常用字段速查表解析完成后req.useragent上可用的关键字段字段类型说明isBotboolean是否命中爬虫/机器人botNamestring命中的模式标识如googlebot、curl未命中为空串isMobile/isDesktopboolean移动端 / 桌面端isMobileNativebooleanAndroid/iOS 原生 AppDalvik、okhttp 等browser/version/osstring浏览器、版本、操作系统isWechatboolean微信内置浏览器isCurlbooleancurl 客户端sourcestring原始 UA 字符串一个典型的桌面浏览器输出长这样节选自 README.md{ isMobile: false, isDesktop: true, isBot: false, browser: Chrome, os: macOS Sonoma }防误报技巧别把真实用户当爬虫 ⚠️这是 isBot 检测最容易翻车的地方。分享几个实战要点1. 警惕 UA 里的关键词污染真实案例TikTok 的内置 WebView 会带上googleplayGoogle Play 渠道标识字样朴素地匹配google就会把 TikTok 用户判成爬虫。express-useragent 在testBot()中内置了豁免逻辑——命中google但同时出现tiktok/trill/bytedance时直接放行src/express-useragent.ts。对应测试用例见 tests/bots.test.ts。给你的启示如果给项目贡献新爬虫模式务必同时补一个正常浏览器不应命中的反向测试用例。2. 用 botName 做二次确认而非一刀切isBot只适合做粗筛。更稳妥的策略是isBot true且botName命中你维护的白名单googlebot、baiduspider 等→ 放行甚至提速isBot true但botName是python、curl这类通用客户端 → 结合频率、路径综合决策isBot false也别完全放心UA 可以伪造敏感接口建议叠加请求速率限制3. 别只依赖 UA配合行为判断UA 字符串本质是自我申报攻击者改一行请求头就能伪装成 Googlebot。生产环境建议 isBot 与限流、验证码、IP 信誉等手段组合使用。安全加固防 UA 注入与 ReDoS 攻击 ️把 UA 字符串当不可信输入处理是这个项目值得学习的细节超长头截断Client Hints 解析时限制最大 2048 字符MAX_HEADER_LENGTH防止超大 header 拖垮解析品牌数量上限brand 列表最多解析 20 条字符级解析替代正则产品 token 解析改为逐字符扫描从根源上规避正则回溯ReDoS风险。这些对抗性测试集中在 tests/security.test.ts包括5000 个连字符重复 2000 次 iPad 字样等恶意输入场景值得做反爬的开发者借鉴。想新增一个爬虫5 分钟更新 Bot 列表发现没收录的爬虫时贡献流程在 CONTRIBUTING.md 中写得非常清晰在BOTS数组中加入模式src/express-useragent.ts建议用小写、简单正则在 tests/bots.test.ts 补充应识别与不应误伤两类用例运行npm test和npm run lint验证后提交 PR。官方特别强调每个新模式都要验证不会误伤合法浏览器——这正呼应了本文的防误报主题。常用项目文件导航 文件用途README.md快速开始、API 一览、浏览器端用法src/express-useragent.ts核心解析器BOTS 表、testBot、系统/浏览器识别src/index.tsExpress 中间件与类型导出tests/bots.test.ts爬虫识别测试用例含 TikTok 防误报案例tests/security.test.tsReDoS 与恶意输入测试examples/server.tsExpress 演示服务CONTRIBUTING.mdBot 列表更新指南小结一个字段解决识别isBotbotName即可覆盖 80 常见爬虫与机器人接入 Express 只需一行中间件防误报是重点善用 botName 二次确认、内置豁免机制如 TikTok WebView 案例UA 判断务必与限流等手段组合安全细节到位输入截断、字符级解析等加固让解析器本身不会被恶意 UA 拖垮对于新手来说先跑通npm run express看一遍真实 UA 的解析输出再对照本文的字段速查表基本就能上手给自家项目加一套靠谱的爬虫识别了。【免费下载链接】express-useragentNodeJS user-agent middleware项目地址: https://gitcode.com/gh_mirrors/ex/express-useragent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
