security: 终端用户密码最小长度调整为 6 位 #51

Closed
opened 2026-08-24 17:42:07 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:安全策略调整
  • 所属 Epic:#3
  • 所属 MVP / 版本:#35 / MVP-2
  • 阶段:已完成

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-24
  • 脱敏摘要:用户要求将终端用户密码最小长度降低为 6 个字符,并确认按分析方案建工单实施。

目标

在当前受控用户、非公开注册的范围内,将终端用户密码编码的最小长度从 12 调整为 6,使指定测试账号能够使用 6 位以上密码;不改变管理员密码策略。

已确认方案

  • 仅修改根模块 internal/platform/password.Encode 的最小长度边界:6 至 1024。
  • 保持 bcrypt:v1:<hash>、bcrypt cost、未知版本失败关闭、登录限流和统一认证错误不变。
  • Verify 继续兼容所有已有版本化哈希,已有用户无需迁移或重置密码。
  • 增加边界测试:5 字符拒绝,6 字符可编码并正确验证。
  • 实施完成后在当前 Portal 开发数据库创建受控测试账号并实际验证账号密码登录;明文密码不写入代码、Git、工单、Wiki 或应用日志。

非目标

  • 不调整 go-admin 管理员密码策略。
  • 不开放注册、找回密码、自助修改密码或管理员用户管理入口。
  • 不增加密码复杂度、过期、历史密码或 MFA。
  • 不修改数据库结构,不执行 AutoMigrate。

风险与控制

  • 6 位密码的抗猜测能力低于原 12 位策略,仅适用于当前受控用户和快速开发环境。
  • 保留现有远端地址登录限流、统一错误响应和 bcrypt 哈希,避免扩大本工单范围。
  • 未来开放注册或外部用户前,必须重新评估并提高密码策略。

回退

将编码最小长度恢复为 12;已有 6 至 11 位密码哈希仍可验证,避免回退导致现有用户立即无法登录。若需强制升级密码,另行设计重置流程。

验收标准

  • 5 字符密码无法编码。
  • 6 字符密码可编码为版本化 bcrypt 哈希并验证成功。
  • 12 位以上既有密码和未知版本失败关闭行为不变。
  • Portal 登录限流、Session/CSRF、管理员认证边界未改变。
  • 根模块 Go 测试与静态检查通过。
  • 指定测试账号在当前 Portal 可以使用账号密码登录。
  • 长期 Wiki 记录 6 位最低策略及仅适用于当前受控用户的风险。

文档影响

更新 Business-Rules-and-Glossary、Architecture-and-Code-Map、Local-Development-and-Verification。

## 基本信息 - 类型:安全策略调整 - 所属 Epic:#3 - 所属 MVP / 版本:#35 / MVP-2 - 阶段:已完成 ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-24 - 脱敏摘要:用户要求将终端用户密码最小长度降低为 6 个字符,并确认按分析方案建工单实施。 ## 目标 在当前受控用户、非公开注册的范围内,将终端用户密码编码的最小长度从 12 调整为 6,使指定测试账号能够使用 6 位以上密码;不改变管理员密码策略。 ## 已确认方案 - 仅修改根模块 `internal/platform/password.Encode` 的最小长度边界:6 至 1024。 - 保持 `bcrypt:v1:<hash>`、bcrypt cost、未知版本失败关闭、登录限流和统一认证错误不变。 - `Verify` 继续兼容所有已有版本化哈希,已有用户无需迁移或重置密码。 - 增加边界测试:5 字符拒绝,6 字符可编码并正确验证。 - 实施完成后在当前 Portal 开发数据库创建受控测试账号并实际验证账号密码登录;明文密码不写入代码、Git、工单、Wiki 或应用日志。 ## 非目标 - 不调整 go-admin 管理员密码策略。 - 不开放注册、找回密码、自助修改密码或管理员用户管理入口。 - 不增加密码复杂度、过期、历史密码或 MFA。 - 不修改数据库结构,不执行 AutoMigrate。 ## 风险与控制 - 6 位密码的抗猜测能力低于原 12 位策略,仅适用于当前受控用户和快速开发环境。 - 保留现有远端地址登录限流、统一错误响应和 bcrypt 哈希,避免扩大本工单范围。 - 未来开放注册或外部用户前,必须重新评估并提高密码策略。 ## 回退 将编码最小长度恢复为 12;已有 6 至 11 位密码哈希仍可验证,避免回退导致现有用户立即无法登录。若需强制升级密码,另行设计重置流程。 ## 验收标准 - [x] 5 字符密码无法编码。 - [x] 6 字符密码可编码为版本化 bcrypt 哈希并验证成功。 - [x] 12 位以上既有密码和未知版本失败关闭行为不变。 - [x] Portal 登录限流、Session/CSRF、管理员认证边界未改变。 - [x] 根模块 Go 测试与静态检查通过。 - [x] 指定测试账号在当前 Portal 可以使用账号密码登录。 - [x] 长期 Wiki 记录 6 位最低策略及仅适用于当前受控用户的风险。 ## 文档影响 更新 Business-Rules-and-Glossary、Architecture-and-Code-Map、Local-Development-and-Verification。
Author
Owner

实施完成,等待验收

  • 提交:40342d0 security: 调整终端用户密码最小长度 (#51),已推送至 origin/main。
  • 终端用户 password.Encode 最小长度由 12 调整为 6,最大长度仍为 1024。
  • bcrypt 版本、cost、验证逻辑、未知版本失败关闭、Portal 登录限流、Session/CSRF 和管理员认证边界均未改变。
  • 已在当前开发数据库创建指定受控测试账号,并通过运行中的 Portal 真实登录接口验证认证成功;未在工单、Wiki、Git 或应用日志记录明文密码。
  • Portal 已使用本次构建重启,Supervisor 状态为 Running。

验证

  • 5 字符拒绝、6 字符编码和验证成功:通过。
  • go test ./...:通过。
  • go vet ./...:通过。
  • python dev_scripts/harness.py check --strict:通过。
  • 核心 Wiki sync --check:通过。
  • Portal 真实账号密码登录:通过。

Wiki revision

  • Business-Rules-and-Glossary:c0bfdb1121f034cd4acb512a547d7d131747a7d5
  • Architecture-and-Code-Map:e65276530a4fb1e317ea9236aabf3677f137d199
  • Local-Development-and-Verification:16d71776a494099a31556d68a76ac32b8405199e

本工单保持“待验收”,未关闭,也未导出任务归档。

## 实施完成,等待验收 - 提交:`40342d0 security: 调整终端用户密码最小长度 (#51)`,已推送至 `origin/main`。 - 终端用户 `password.Encode` 最小长度由 12 调整为 6,最大长度仍为 1024。 - bcrypt 版本、cost、验证逻辑、未知版本失败关闭、Portal 登录限流、Session/CSRF 和管理员认证边界均未改变。 - 已在当前开发数据库创建指定受控测试账号,并通过运行中的 Portal 真实登录接口验证认证成功;未在工单、Wiki、Git 或应用日志记录明文密码。 - Portal 已使用本次构建重启,Supervisor 状态为 Running。 ### 验证 - 5 字符拒绝、6 字符编码和验证成功:通过。 - `go test ./...`:通过。 - `go vet ./...`:通过。 - `python dev_scripts/harness.py check --strict`:通过。 - 核心 Wiki `sync --check`:通过。 - Portal 真实账号密码登录:通过。 ### Wiki revision - Business-Rules-and-Glossary:`c0bfdb1121f034cd4acb512a547d7d131747a7d5` - Architecture-and-Code-Map:`e65276530a4fb1e317ea9236aabf3677f137d199` - Local-Development-and-Verification:`16d71776a494099a31556d68a76ac32b8405199e` 本工单保持“待验收”,未关闭,也未导出任务归档。
Author
Owner

人工验收完成

  • 用户于 2026-08-24 明确确认 #51 验收通过。
  • Wiki 归档:Task-51-终端用户密码最小长度调整为-6-位
  • 归档 revision:3ec7916602df83bb925bc2b8a1e904a021f029aa
  • 核心 Wiki 镜像 sync --check:通过。
  • 实现提交:40342d0

父工单 #35 与 Epic #3 已同步勾选,本工单关闭。

## 人工验收完成 - 用户于 2026-08-24 明确确认 #51 验收通过。 - Wiki 归档:`Task-51-终端用户密码最小长度调整为-6-位` - 归档 revision:`3ec7916602df83bb925bc2b8a1e904a021f029aa` - 核心 Wiki 镜像 `sync --check`:通过。 - 实现提交:`40342d0` 父工单 #35 与 Epic #3 已同步勾选,本工单关闭。
ila closed this issue 2026-08-24 22:25:14 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/chorus#51