VWCG-1237 管理员强密码、首次改密及会话失效
增强版历史草案,已被最小整改方案替代
8h预计工时
4实施切片
2新增数据库字段
当前审核真源:VWCG-1237-CODE-01-minimal-password-remediation.html。本页不再作为本次弱口令漏洞实施依据。
目标结果
- 后台新密码统一为12~32位,包含大小写字母、数字和特殊字符。
- 新建账号和管理员还原密码后,首次登录只能修改密码。
- 自助改密、首次改密和管理员还原后,全部旧Token失效。
- 现有90天到期、5次失败锁定、二次验证码和30分钟空闲超时不回归。
核心数据与契约
| 设计 | 说明 |
|---|---|
must_change_pwd | 新建/管理员重置写1;用户成功改密写0;历史账号升级默认0。 |
session_version | 默认1;任何改密/重置操作递增;Token版本与数据库不一致即失效。 |
| 登录 code=2 | 统一返回 password_change_required 和 FIRST_LOGIN/EXPIRED,不签发普通业务Token。 |
| 改密接口 | 复用 /p/login/changeExpiredPwd,成功后更新密码、清首次标记、递增会话版本并要求重新登录。 |
依赖顺序
数据库字段
→ 统一 PasswordPolicyService
→ 新建/重置/自助改密状态
→ 登录首次改密判断
→ Token会话版本校验
→ PC前端交互
→ PHPUnit + HTTP + 构建 + 发布复测
四个实施切片
1. 数据库与统一密码策略(2h)
新增两个字段和 PasswordPolicyService;锁定12位、大小写/数字/特殊字符、账号包含、弱口令和连续字符规则。
2. 新建、重置和自助改密闭环(2h)
新建/还原设首次改密;自助改密清标记;所有路径更新密码时间并递增会话版本。
3. 登录与旧会话失效(2h)
首次改密优先于密码到期和二次验证码;Token带版本,每次解析与账号当前版本比较。
4. PC前端、契约与回归(2h)
同步登录、首页改密、账号管理页面,更新OpenAPI/Apifox并完成安全回归。
主要修改文件
| 区域 | 文件 |
|---|---|
| 策略 | application/common/service/PasswordPolicyService.php |
| 后端 | application/p/logic/Login.php、User.php及对应控制器/校验器 |
| 前端 | public/static/src/view/login.vue、home.vue、system/accountSetting.vue |
| 数据 | 正式版本SQL:must_change_pwd、session_version |
| 测试 | tests/Security/SecurityFixesTest.php、tests/apifox/http/、OpenAPI/Apifox |
发布门禁
- PHPUnit、HTTP安全回归、PC lint/build全部通过。
- 升级SQL执行和字段回读成功。
- 部署后全部旧后台Token失效,用户重新登录。
- 新吴区管理员完成重置,首次改密正常。
- 普通登录、密码到期、二次验证码、失败锁定无回归。
- 制品SHA、SQL、部署时间、复测和回滚点齐全。
当前状态:方案待评审,尚未实施代码。