安全
Turnstile 与 WAF 安全基线
分清人机验证与请求过滤,建立必须服务端验证、规则从小范围开始的安全基线。
编辑与核验:橙宝书编辑团队 ·
SECURITY进阶22 分钟最后核验:2026-08-26
Turnstile 必须服务端验证
浏览器里的 Widget 成功不是授权证据。后端必须把 Token 提交到 Siteverify;Token 单次使用且会过期,不能缓存或复用。
两道不同的门
| 能力 | 判断对象 | 合适场景 |
|---|---|---|
| Turnstile | 一次用户交互产生的 Token | 注册、登录、提交表单 |
| WAF Custom Rule | 请求属性表达式 | 已知恶意路径、来源或行为模式 |
WAF 规则由匹配表达式和动作组成,并按顺序执行。前面的 Block 等终止动作会让后续规则不再运行,因此顺序本身就是安全配置。
安全上线顺序
先保护后端动作
接收表单后,在服务端调用 Siteverify。缺 Token、验证失败、超时与重复 Token 都必须拒绝;不要只隐藏按钮。
WAF 从可解释条件开始
先用一个窄路径与明确条件;优先观察或 Managed Challenge,再根据证据决定 Block。免费套餐没有 Log 动作时,也不要因此直接扩大 Block 范围。
验证允许和拒绝
用正常请求确认没有误伤,再用安全测试请求确认规则确实触发。保存 Ray ID、规则 ID 与时间。
if (!token) return Response.json({ error: 'turnstile_required' }, { status: 400 });
const result = await verifyWithSiteverify(token, clientIp);
if (!result.success) return Response.json({ error: 'turnstile_failed' }, { status: 403 });
return performProtectedAction();这里只展示控制流;真实实现的 Secret 必须来自 binding,错误响应不得回显 Siteverify Secret 或内部响应。
回滚边界
- Turnstile 故障时,敏感写操作默认 fail closed,并提供人工支持路径。
- WAF 误伤时只停用最近规则,不清空整套防护。
- 变更前导出规则表达式和顺序,保留可恢复版本。
官方来源
这篇内容帮你完成目标了吗?
内测反馈只在当前浏览器生成,不会自动上传。