Files
story/docs/local-slide-captcha.md
T
Codex Local bf1233d5df
ci / verify (push) Canceled after 0s
feat: expand companion platform, device controls, and memoir workflows
Add customer and operator login, BLE provisioning, device fleet controls, call memory, memoir generation, and refreshed family and maintenance portals. Include API contracts, migrations, firmware sources, tests, assets, and deployment documentation.
2026-10-08 10:06:44 +08:00

16 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 本地拼图滑块验证码
SaaS 登录使用本地开源拼图滑块,数字图片与腾讯云验证码仍是服务端策略允许的模式。迁移 74 只扩展 SaaS 可选模式,不自动更改默认策略;小程序继续使用原图片模式,不能启用尚未发布的滑块协议。
生成接口返回 `mode: slide`、`captcha_id`、`expires_at_ms`,320×180 JPEG 主图、52×52 透明 PNG 拼块以及拼块初始 `thumb_x/thumb_y`。图像均为内嵌 data URL。主图有一个目标缺口和两个同形干扰缺口,拼块对应目标处的背景。坐标、背景和形状使用 `crypto/rand`;客户端不获得目标 X。
客户端将释放点转换为原图坐标,向同一入口的 `/captcha/verify` 提交 `{captcha_id,x,y}`,位置误差最多 3 像素。正确位置换取随机 32 字节 `captcha_ticket`,再通过既有密码登录或申请短信参数提交该凭证;图片答案和腾讯随机字符串不能替代本地凭证。
挑战与凭证总有效期仍为生成后 2 分钟,验证不会延期。会话、客户端和策略版本必须匹配;错误位置原子消费挑战,凭证只可消费一次。刷新会替换旧挑战,Lua 比较旧记录并保持原 TTL,避免延迟校验覆盖新挑战。Redis 中目标位置经过 AES-GCM 加密,凭证只存 HMAC,Origin、CSRF、会话检查及原手机号/IP/短信总量限制继续执行。
拼图是自部署的人机交互门槛,并不具备腾讯云完整的行为识别、设备信誉或风险模型;图像匹配程序仍可能解题。验证码不能替代短信限流或可信浏览器策略。增加验证码或验证尝试仍受会话及 IP 限流约束。最多同时渲染两个挑战,静态图片只解码一次,拥挤时返回 `CAPTCHA_BUSY`。
组件和图片来源、版本及 Apache-2.0/MIT 许可证见 `third_party/local-slide-captcha/NOTICE.md`。API 与 Web 分发镜像均携带完整通知及许可证,运行容器逐文件摘要已核对。
2026-09-30 已上线 API/Web `0.99.19-rc.local-slide1`、迁移 74 和策略 version=4(SaaS=slide、mini=image)。42 项隔离后端集成及 10 项 React 测试通过,API Linux 与前端构建通过;两个既有安全依赖补丁后扫描无应用可达报告。真实浏览器弹窗、换图、过期提示及取消已确认。没有自动解答真实验证码、发送真实短信或据此宣称账号登录成功。旧小程序兼容 API 保留;用户后续要求小程序只开放家庭端、只保留微信一键登录,运营使用网页,小程序发布状态另见其验收记录。