人机验证
JS 工作量证明挑战、自适应行为评分、蜜罐诱捕与高置信 Bot 自动拉黑(带 TTL 自愈)。
「人机验证」用 JS 工作量证明(PoW)挑战挡不执行 JS 的脚本与爬虫;adaptive 模式下叠加行为评分层,正常流量透明放行、可疑流量才挑战、高置信 Bot 自动拉黑(带 TTL 自愈、白名单豁免防 NAT 误封)。还有蜜罐诱捕与行为遥测。

#工作模式
| 字段 / 控件 | 默认 / 示例 | 说明 |
|---|---|---|
enabled | false | 总开关。 |
mode | always | always 每个请求都做 PoW;adaptive 按行为评分分级处置。 |
difficulty | 16 | PoW 前导零比特数,越大越难、浏览器耗时越长。 |
pass_ttl_seconds | 1800 | 通过后 pass 通行证有效期。 |
shadow | false | 灰度:true = 只记录会封谁、不真封。 |
#行为评分(adaptive)
| 字段 / 控件 | 默认 / 示例 | 说明 |
|---|---|---|
scoring.enabled | false | 开启行为评分,adaptive 模式需要。 |
challenge_at | 0.5 | 可疑分达此 → 主动挑战。 |
captcha_at | 0.75 | 达此 → 升级验证码。 |
block_at | 0.9 | 达此 → 自动拉黑。 |
decay_seconds | 300 | 分数滑动衰减(误判自愈)。 |
#蜜罐与自动拉黑
| 字段 / 控件 | 默认 / 示例 | 说明 |
|---|---|---|
honeypot.paths | [] | 隐藏陷阱路径(正常用户不会访问),命中即高置信 Bot。 |
auto_block.ttl_seconds | 600 | 初始封禁时长(临时、自动过期)。 |
auto_block.escalate | true | 重犯指数级延长,封顶 max_ttl_seconds。 |
auto_block.exempt_authenticated | true | 已登录用户不自动封(白名单 / 可信代理也永不自动封)。 |
#API 画像与请求签名
人机验证页的「API 画像」选项卡是给非浏览器客户端准备的——小程序、App 解不了 JS 挑战,也不该被行为评分误伤。两件事分层做:
API 画像绑定声明某路由的期望客户端形态(UA 必含子串、Referer 域、JA3 指纹)。合法客户端直接放行、不评分不挑战;被浏览器直调或 Postman 伪造则判为画像漂移,按配置拦截或挑战。
API 请求签名比画像更强的一层:每个请求带 X-Moguard-Ts / Nonce / Sig 三个头,时间戳须新鲜、随机数只能用一次——抓包重放无效。
画像挡「换个客户端来调」,签名挡「原样录下来再发一遍」。完整的协议规范、七种语言实现、现成 JS SDK 与灰度上线顺序见 API 请求签名与 SDK;客户端收到 401 / 403 时怎么处理见 API 客户端响应处理。
签名规则要最后加给某个路由前缀配了签名规则后,未带签名的请求会被直接拒绝。务必先把客户端铺开、把第三方回调放进免签例外,最后才加规则。
墨守还能自动学 API 客户端画像(UA 家族 / JA3 / Referer 分布)、采集鼠标 / 击键行为遥测判定脚本化操作。这些进阶项在配置页展开,冷启动期只观察不处置,抗投毒设计。
