ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

cap 项目 Elysia 中间件实战:用 capMiddleware 为 Bun 应用添加 PoW CAPTCHA 检查点

cap 项目 Elysia 中间件实战:用 capMiddleware 为 Bun 应用添加 PoW CAPTCHA 检查点 网络安全应用安全后端【免费下载链接】capFree, open-source and self-hosted CAPTCHA alternative to reCAPTCHA. Privacy-first and powered by proof-of-work and instrumentation challenges.项目地址https://gitcode.com/gh_mirrors/cap13/cap点击查看免费下载Cap 是一个免费、开源、可自行托管的 CAPTCHA 替代方案reCAPTCHA 的隐私优先替代品核心由 proof-of-work工作量证明挑战与 instrumentation浏览器检测两类挑战组成。Elysia 中间件cap.js/middleware-elysia是官方提供的检查点Checkpoint接入方式只需在 Elysia 应用中加几行代码即可复刻 Cloudflare 式的浏览器检查过渡页在机器人、LLM 与自动化流量触达业务路由之前将其拦下。读完本文你将掌握该中间件的安装、模板配置、全部核心参数含义含作用域 scoping 模式以及它在仓库中的底层实现印证。检查点Checkpoint是什么在深入了解 Elysia 中间件之前需要先理解检查点这一概念。仓库的 中间件总览文档 明确指出Cap 的 Checkpoints此前称为 middlewares用于复刻 Cloudflare 的浏览器检查过渡页browser check interstitial目的是防止机器人、LLM 和自动化滥用流量到达你的网站。与把整个站点迁到 Cloudflare 不同它只需要在服务器上添加几行代码即可生效。需要特别注意的是官方将该方案定性为核弹级解决方案nuclear solution因为它同样会拦截搜索引擎爬虫等良性机器人。因此在使用前需要评估你的站点对搜索引擎收录的依赖程度。Elysia 中间件就是这套检查点体系在 Elysia基于 Bun 的快速 Web 框架上的官方实现对应文档位于 docs/fr/guide/middleware/elysia.md英文版见 docs/guide/middleware/elysia.md。安装Elysia 中间件需要与 Elysia 框架本体一起安装使用 Bun 作为包管理器bun add elysia cap.js/middleware-elysia其中elysiaElysia 框架本体基于 Bun 运行时支持 TypeScript 类型推导cap.js/middleware-elysiaCap 官方 Elysia 检查点中间件。小提示仓库中同一检查点体系还有 Expresscap.js/checkpoint-express与 Honocap.js/checkpoint-hono的实现用法几乎一致可分别参考 Express 检查点文档 与 Hono 检查点文档。准备验证模板中间件需要一份 HTML 模板作为检查点过渡页官方文档对此的要求非常宽松模板中只需包含一个指向/__cap_clearanceURL 的 widget 或隐藏 solver 即可原文档中的示例模板托管在外部仓库本文不展开外链你可以参考仓库内 widget 文档 了解如何嵌入 widget。也就是说你需要准备一个index.html内部放置 Cap widget或隐藏的 solver并把它的目标端点指向/__cap_clearance——这是中间件约定的放行clearance路由。浏览器通过检查后会经由该路由换取后续请求所需的令牌token。使用接入 Elysia 应用原文档给出了最小接入示例核心代码如下import { Elysia } from elysia; import { capMiddleware } from cap.js/middleware-elysia; import { join, dirname } from node:path; import { fileURLToPath } from node:url; new Elysia() .use( capMiddleware({ token_validity_hours: 32, // 令牌有效时长小时 tokens_store_path: .data/tokensList.json, // 令牌持久化存储路径 token_size: 16, // 令牌字节数 verification_template_path: join(dirname(fileURLToPath(import.meta.url)), ./index.html), scoping: scoped, // global | scoped }), ) .get(/, () Hello Elysia!) .listen(3000);需要指出一个细节原文档示例只从elysia导入了{ Elysia, file }其中file在本示例中并未使用而配置里用到的join、dirname、fileURLToPath需要从 Node 标准库导入。上面这段已经补齐了这些导入可直接复制运行。启动后访问http://localhost:3000就会先看到检查点页面通过 PoW 挑战后才会到达Hello Elysia!路由。verification_template_path指向的index.html就是前面准备的检查点模板。使用import.meta.url配合dirname/fileURLToPath可以稳妥地定位到 ES 模块所在目录避免运行时工作目录不确定导致的路径错误。核心配置参数详解将配置项整理如下其中默认值与取值范围以仓库文档与同类实现为准参数示例值作用说明token_validity_hours32放行令牌的有效期小时浏览器通过检查后获得的令牌在此时间内有效过期后需重新挑战调大可减少真实用户被反复要求验证的频率调小可收紧放行窗口tokens_store_path.data/tokensList.json令牌的 JSON 持久化文件路径中间件把已发放/已验证的令牌写入该文件这一设计在 cap.js/server 文档 中也能找到印证其tokens_store_path同样指向.data/tokensList.json用于 JSON 键值存储token_size16令牌的字节数控制生成的随机令牌长度默认示例为 16 字节verification_template_pathjoin(dirname(...), ./index.html)检查点过渡页模板路径模板内需包含指向/__cap_clearance的 widget 或隐藏 solverscopingscoped令牌作用域策略取值为global \| scoped见下文作用域scoping小节作用域scoping说明scoping有两个取值scoped默认示例值发放的令牌与特定作用域绑定。从仓库的 capjs-core 文档 可以印证 Cap 挑战体系本身支持scope绑定——generateChallenge可将挑战绑定到某个字符串作用域例如站点标识或路由名验证时若传入的scope不匹配会返回scope_mismatch。中间件层面的scoped模式正是复用这一机制让令牌只对绑定的站点/路由有效global发放的令牌全局有效不绑定特定作用域适用于单站点全站保护的场景。在多站点或多路由场景下scoped能防止一个站点上获得的令牌被用于另一个站点减小令牌横向复用风险。工作流程一次完整的检查点放行结合 中间件总览 与 capjs-core 的说明检查点的完整流程可以拆解为拦截用户访问被保护的 Elysia 路由中间件发现请求未携带有效放行令牌返回检查点过渡页即verification_template_path指向的模板挑战下发模板中的 widget 向中间件请求挑战服务端生成 PoW 挑战可附带 instrumentation 检测widget 在浏览器端完成工作量证明计算提交验证widget 将{ token, solutions }启用 instrumentation 时还包含instr提交到验证端点服务端校验 PoW 答案与 instrumentation 指纹发放令牌验证通过后中间件经/__cap_clearance放行并发放令牌令牌有效期由token_validity_hours控制令牌列表持久化到tokens_store_path后续放行此后该浏览器携带令牌访问受保护路由即可直接通过直到令牌过期。在仓库中Elysia 与挑战生成/验证的这套配合有直接实现印证Standalone 服务端standalone/src/cap.js本身就是一个基于 Elysia 构建的挑战服务它通过.post(/:siteKey/challenge, ...)下发挑战、.post(/:siteKey/redeem, ...)校验并换发令牌其中coreGenerateChallenge/coreValidateChallenge来自capjs-core令牌 TTL、scope 绑定、重放防护nonce 消费都在该文件中实现。可以看到Cap 官方在 Elysia 上有着成熟的服务端实践Elysia 中间件是这套能力在自建应用侧的封装。注意事项与常见问题会拦截良性机器人如前所述检查点是核弹级方案搜索引擎爬虫、监控探针等自动化访问同样会被要求通过 PoW 挑战。若站点依赖 SEO需慎重全局启用。令牌持久化tokens_store_path指向的 JSON 文件是令牌的落地存储服务重启后令牌仍可恢复验证确保该目录可写、路径在部署环境如 Docker中已挂载持久卷。模板必须指向/__cap_clearance这是中间件约定的放行路由模板中 widget/solver 若指向其他端点检查点将无法完成放行。作用域一致性使用scoped时确保前端 widget 请求挑战与后端验证使用同一 scope对应 capjs-core 中的scope_mismatch校验否则即使 PoW 正确也会被拒绝。旧库对比如果你正在使用更早的cap.js/server手写挑战路由可以参考 cap.js/server 文档 中基于 Elysia 的/cap/challenge、/cap/redeem路由示例而官方现已推荐使用无状态的capjs-corecapjs-core 文档检查点中间件本质上把这一整套挑战-验证-令牌逻辑收敛成了.use(capMiddleware({ ... }))一行接入。小结Elysia 检查点中间件把 Cap 的 PoW CAPTCHA 与浏览器检测能力以插件形式嵌入 Elysia 应用安装两个依赖、准备一个指向/__cap_clearance的过渡页模板、传入token_validity_hours、tokens_store_path、token_size、verification_template_path、scoping五个核心参数即可完成全站保护。它适合希望在不迁移到第三方 CDN/WAF 的前提下用少量代码为 Bun Elysia 应用挡住自动化流量的场景但也要清醒认识到它对搜索引擎等良性爬虫的影响按需启用。赞分享网络安全应用安全后端【免费下载链接】capFree, open-source and self-hosted CAPTCHA alternative to reCAPTCHA. Privacy-first and powered by proof-of-work and instrumentation challenges.项目地址https://gitcode.com/gh_mirrors/cap13/cap点击查看免费下载相关推荐Cap 项目 Elysia 中间件集成指南用 Cap Checkpoint 为 Elysia 应用接入自托管 PoW 人机验证Cap 项目 Elysia 中间件集成指南用 Cap Checkpoint 为 Elysia 应用接入自托管 PoW 人机验证 Cap 是一套免费、开源、可自网络安全应用安全后端Encore 数据库 Schema 迁移实战用 Migration Files 安全演进 SQL 数据库结构Encore 数据库 Schema 迁移实战用 Migration Files 安全演进 SQL 数据库结构 导读 本文围绕 Encore 平台内置的数据库网络安全应用安全后端如何为 Rails 应用添加自定义 Rack 中间件并用 bin/rails middleware 检查中间件栈如何为 Rails 应用添加自定义 Rack 中间件并用 bin/rails middleware 检查中间件栈 在开发 Rails 应用时你常常需要在请求到Web框架后端上一篇终极指南如何防止Android应用被系统杀死——推荐这款开源神器下一篇Frappe v5.0.32 变更解析Awesome Bar 报告检索、日期控件默认值与文档映射增强创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表