TSM Travel 的管理面板登录页带一枚滑动验证码——拼图缺口式。装过同类系统的人大概都会先想到一个问题:是不是又要多装一个图形库?
图片由后端零依赖生成
验证码图片由后端用纯标准库直接写出 PNG,不需要 Pillow。这意味着部署机器上不必为了一个登录验证码多装一个图形库,也不必担心图形库在某些精简系统上编译不过。首次初始化页面不需要验证码——那时面板还没有账号。
缺口位置不下发浏览器
缺口的位置只存在于用 session_secret 加密签名的 token 里,不下发给浏览器。服务端校验落点误差(±6px)之后,才继续核对账号密码;验证码失败同样计入登录限速。
因为是无状态 token,用 --workers 大于 1 做多进程部署时,也不会出现「验证码对不上」的问题。
它只是管理面的一道门
验证码与登录鉴权都属于管理面。转发内核不参与其中,也拿不到管理凭据——这是「管理面与数据面分离」这条红线带来的额外收益:交互面被攻破,也不等于数据面被直接放通。