找回密码的验证码,强度和错误锁定该怎么配

📅 2026-10-09 👁️ 0

找回密码的验证码、登录验证码和公开表单用的验证码,看着是同一个控件,要防的其实不是一件事。位数与随机来源决定它能不能被猜中,有效期决定被截获后还有多久可用,错误次数锁定决定能不能反复试。三项要一起配,缺任何一项都能被绕过。

三类验证场景要的不是一件事

场景 主要风险 强度取向 锁定与时效
找回密码 票据被猜中或复用 随机来源要可靠,位数不能太少 有效期短,按单次使用作废
登录 批量撞库 失败计数比位数更关键 绑定同一入口做错误次数锁定
公开表单 机器批量提交 交互验证更适合 配合频率限制,不宜只靠图形码

找回密码这一类的关键在于「一次性」:验证码在核验通过后应当立即作废,避免同一个码被重复提交。PbootCMS 在 V3.2.25(build 2026-09-08)的更新日志里就加固了找回密码验证码,改为 6 位安全随机生成,并增加过期时间与错误次数锁定,方向和上面三项一致。

位数与随机来源为什么重要

位数不够时,配合无限次尝试,穷举成本会低到可以忽略。所以「加长位数」和「限制尝试次数」是成对出现的,只做其中一项收益有限。

更常被忽略的是随机来源。用可预测的规则拼出的码,即使位数达标,仍然可能在有限尝试内命中。安全随机生成解决的是这一层:不依赖时间戳、不依赖顺序编号。

同一类问题在站内修复记录里也有对应:v3.6.6 处理过站点切换场景下登录凭证可被伪造的隐患,做法是改成一次性票据,同时建议轮换签名密钥并修改管理员密码。这类改动的共同点是——把「可复用的凭证」变成「用完即废的凭证」。

有效期与错误次数锁定怎么配

有效期按业务流程定:找回密码的场景里用户通常会在几分钟内完成填写,过期时间没必要留长;留长的代价是给了对方更多尝试窗口。

错误次数锁定要绑定同一入口。按账号锁、按目标邮箱锁、按来源地址锁,防的是不同打法:只锁账号挡不住换一个账号继续试同一邮箱,只锁地址挡不住换 IP。配置时要确认锁计数与解锁条件写在一起,别出现锁了却没自动解除的情况。

机器人防护与内容防护的分工

表单防机器人这一步,站内支持在表单接入 reCAPTCHA 这类验证码,把判断交给交互验证而不是自绘图形码。它的价值在于抗批量提交,但它不是内容安全的全部:即使提交动作合法,内容本身仍可能带风险。

安企CMS 的内容安全设置里,敏感词过滤与关键词替换、内容审核处理的是提交内容的表述风险,而 JWT 认证、对 SQL 注入和 XSS 的防御处理的是接口与页面层风险。三层分工是:reCAPTCHA 挡机器,敏感词过滤管表述,认证与注入防护管通道。留言与评论这类入口要三层一起看,只开一层就会留下明显的绕过路径。

自查清单

  • 找回密码验证码是否为安全随机生成、是否有过期时间、核验通过后是否作废;
  • 错误次数锁定是否绑定到具体入口,是否有解锁路径;
  • 公开表单是否接入交互验证,且与频率限制同时开启;
  • 评论内容是否走敏感词过滤与审核,而不是只看提交频率;
  • 版本升级说明里点到需要轮换密钥与修改管理员口令的,是否真的执行过。

常见问题

问:位数多一点,是不是就不用做错误锁定了? 答:不是。位数提高单次猜中难度,锁定限制尝试次数,两者相乘才是实际强度。

问:表单已被垃圾信息淹没,先加图形码还是先加频率限制? 答:先看提交是否来自同一入口的批量请求。是批量,就先上交互验证与频率限制;是内容有问题,再补敏感词过滤与审核。

问:后台自己的登录要不要开验证码? 答:建议按风险开。后台入口暴露在公网时,失败计数与锁定比前台更重要。

相关文章

标题、关键词、描述这三项该由谁写,手写和自动生成怎么配合

标题、关键词、描述这三项的自动化风险不同:标题建议人工定稿、系统给候选;关键词适合半自动再归一到关键词库;描述可以先自动生成再由人工核对口径,因为它会被搜索引擎独立展示。常见分工是系统出初稿、人管事实与口径,自动生成结果先进草稿或待发布状态,验收后再对外。

2026-10-09

远程抓图接口为什么会被用来探测内网,导入图片时该挡什么

按地址抓取远程图片的功能,本质上是程序替发起人去访问一个地址,如果目标地址不加约束,就可以指向内网服务,这就是服务端请求伪造的成因。加固要按四道限制来做:连接超时、响应大小上限、解析后的地址校验与内网地址拦截、跟随跳转后的再校验;批量导入和内容采集这两条链路共用同一套取值边界才有效。

2026-10-09

一天里二十多条模块级公告同时发布,处置顺序该按什么排

一天里同时发布二十多条模块级安全公告时,处置顺序不能只按评级排。可用的排法是评级乘以「这个模块我到底装没装」:未安装的可以直接结案,装了的再看暴露面是公网页面还是后台内部页,然后才是评级高低和是否已有可用补丁。全站级操作接口默认关闭,能让需要显式开启的能力天然不在当天的可被打面里。

2026-10-09

内容和 AI 之间的授权信号,现在能表达到哪一层

站点表达对 AI 抓取的授权范围目前有两层信号:按路径的排除规则和按用途的授权声明。排除规则能说不让抓哪些路径,却说不清同一篇内容能不能被用来训练;按用途拆分的信号可以把搜索、代理访问、训练三类用途分别表态,粒度已经细到按页面条件设置默认值。站内负责这两层配置的是 robots 设置与面向模型的说明文件生成。

2026-10-09

多语言站点是整页翻译还是逐字段填,维护量差多少

整页翻译一次生成完整页面,人力省在初次生成,代价在后续要跟源页变更;逐字段人工填写更可控,人力花在每一处改动上。判断依据不是哪种更先进,而是改版频率与站点数量:源内容频繁变动的栏目适合逐字段,长尾文章与品牌站扩展适合整页生成后再校对,多站点共用一套后台时要先划清维护边界。

2026-10-09

换了新域名之后,提交给搜索引擎的验证文件要不要重新放

要重新放。密钥与验证文件的作用是证明当前域名与主机的归属,绑定的是「现在这个站点」,不是当初上传的那台机器。换域名后应在新域名根目录或同一主机上可公开访问的文件夹重新放置并重新校验,同时把旧域名到新域名的 301 跳转、站点地图、站内链接推送队列分别重排——跳转关系和提交通道是两件事。

2026-10-09

访问日志能记哪些字段,客户端传来的内容怎么写进去才安全

访问日志的字段是格式指令拼出来的,不是固定表结构。来源地址、请求行、状态码、耗时来自服务器侧,来路与客户端标识由请求方提供、可被伪造。写入客户端可控字段必须依赖转义:默认转义会处理双引号、反斜杠与控制字符,取不到值的变量记为连字符。日志按整站还是按路径配置,决定多站点场景能否分清责任。

2026-10-09

未发布文章下面的留言,匿名访客能不能读到

未发布文章下的留言能不能被匿名读到,取决于可见性是在哪一层判定的。正文和挂在它下面的评论是两层可见性:列表接口按状态过滤,不代表详情接口也过滤。一款主流程序在 2026 年 10 月的安全版本里就修复了「私有与未发布文章的评论被未授权读取」,说明漏点常出在子对象而不是父对象。

2026-10-09