Files
kefu/im/backend/docs/password-policy.md
T
2026-09-03 08:38:17 +08:00

1.8 KiB

密码输入规则

管理端修改密码、管理员创建/重置密码、管理端新增客户端用户,以及客户端注册、找回和修改密码统一取消长度和字符组合要求。允许单个字符、纯数字、纯字母、中文等,不展示密码强度条,也不限制新密码必须不同于旧密码。

保留密码必填、两次输入一致、旧密码核验,以及登录鉴权、短信验证码、接口权限和请求频率限制。修改密码后原有会话继续失效。编辑管理员资料时密码留空仍表示不修改密码。

存储兼容

原有 bcrypt 密码不需要迁移。72 字节以内的密码继续使用 bcrypt;更长的密码使用带随机盐的 Argon2id(19 MiB 内存、2 次迭代、1 个线程),不截断输入。验证时根据哈希前缀选择算法,只接受已支持的参数,避免损坏数据触发不受控的内存分配。已有 password_hash VARCHAR(255) 字段可容纳这两种格式。

使用 Argon2id 是为了避免移除输入上限后触发 bcrypt 的技术限制,参数参考 OWASP 密码存储建议,实现使用 Go Argon2 包。通用 HTTP 请求体积限制保留,不属于密码格式规则。

验证与发布

后端测试覆盖简单密码及长密码的创建和登录、管理员修改密码、旧密码验证、旧会话撤销失败时回滚、已有 bcrypt 密码兼容、长密码尾部不同不能登录、随机盐和损坏哈希处理。

本次修改无需新增数据库迁移。需同步发布后端和管理端;App 用户需安装新包,H5 更新构建。长密码一旦保存为 Argon2id,回退后端到旧版本会导致这些账号无法登录,回退时应保留新哈希的验证支持。