弱口令是什么?
弱口令,几乎是所有系统沦陷的第一入口。
我们用“工程视角 + 安全实战”的方式,彻底讲清楚三件事:
- 什么是弱口令(不是只说“123456”这么简单)
- 弱口令为什么这么致命
- 如何系统性避免 + 安全加固方案(可直接落地)
Passport 平台 – 强制复杂密码与密码黑名单功能设计文档
场景:企业内部 Passport 平台,统一账号体系安全增强。
一、设计目标与定位
1.1 建设目标
本功能用于提升 Passport 平台的登录与注册安全性,核心目标:
- 从“弱密码安全”升级为“策略化安全模型”
- 统一密码规范,降低撞库与暴力破解成功率
- 提供可配置、可演进的密码安全体系
1.2 功能边界
覆盖场景:
- 用户注册
- 用户修改密码
- 管理员重置密码
不涉及:
- MFA / 2FA(留作后续扩展)
- 密码加密算法实现细节
二、功能点拆解
2.1 强制复杂密码策略
平台支持“密码策略规则”统一校验,包含:
| 规则类型 | 说明 |
|---|---|
| 最小长度 | 默认 8 位,可配置 |
| 复杂度 | 四类字符至少包含三类 |
| 禁止包含用户名 | 密码不能包含 username |
| 禁止包含邮箱 | 密码不能包含 email |
密码字符类型判定:
- 大写字母 A-Z
- 小写字母 a-z
- 数字 0-9
- 特殊字符 !@#$%^&*().,? 等
2.2 密码黑名单机制
维护一个弱密码库,用于检测用户提交的密码是否命中弱密码:
示例:
123456
password
admin
qwerty
000000
特性:
- 支持管理员动态维护
- 可导入字典
- 支持模糊规则(如连续数字、键盘序列)
三、角色视角拆分
3.1 用户视角(普通用户)
用户感知层面:
- 注册时实时提示密码强度
- 修改密码时校验复杂度和安全性
- 错误时给出明确提示,不暴露规则细节
交互流程:
输入密码 → 实时检测 → 弱提示 → 提交 → 后端校验
UI 建议:
- 密码强度条:弱 / 中 / 强
-
错误提示示例:
- “密码复杂度不足,请包含三种字符类型”
- “密码过于简单,存在安全风险”
用户无需感知:
- 黑名单规则来源
- 策略细节配置
3.2 管理员视角
管理员能力:
- 配置全局密码策略
- 管理密码黑名单
- 查看命中记录
模块划分:
| 模块 | 功能 |
|---|---|
| 密码策略管理 | 查看 & 编辑系统复杂度规则 |
| 黑名单管理 | 新增 / 删除 / 批量导入 |
| 命中日志 | 哪些用户触发了弱密码拦截 |
四、前端页面设计
4.1 用户端页面拆分
| 页面 | 功能说明 |
|---|---|
| 注册页面 | 密码强度组件 + 校验提示 |
| 修改密码页 | 实时策略提示 |
组件设计:
PasswordInputComponent
├── 密码框
├── 强度条
├── 规则提示列表
└── 弱密码警告
交互规则:
- 输入中异步调用 /passport/password/check
- 提交后再次校验(双重防护)
4.2 管理员端页面
① 密码策略管理页
字段展示:
- 最小长度
- 是否启用复杂度检查
- 是否启用弱密码校验
操作:
- 修改规则
- 启停策略
② 密码黑名单管理
列表字段:
- 黑名单内容
- 来源(系统/手工)
- 创建时间
支持操作:
- 单条新增
- 批量导入
- 逻辑删除
五、API 设计拆分
5.1 用户侧 API
忘记密码、注册的时候,针对密码进行校验。
针对旧代码,前端简单格式校验,只修改校验逻辑,不要动以前的任何其他逻辑!!!
后端做基础的合法性校验,通用的 service 方法
5.2 管理员 API
GET /passport/admin/password/policy
POST /passport/admin/password/policy/update
GET /passport/admin/password-blacklist/list
POST /passport/admin/password-blacklist/add
POST /passport/admin/password-blacklist/delete
六、数据库设计(无外键)
6.1 密码策略表 password_policy
密码策略主配置表
必要字段(包含规范要求):
- id
- create_time
- update_time
- creator_id
- updater_id
- delete_flag
扩展字段:
- min_length
- require_uppercase
- require_lowercase
- require_number
- require_special
- min_type_count
- enable_blacklist
- enable_username_check
- enable_email_check
索引:
- idx_delete_flag
6.2 密码黑名单表 password_blacklist
字段:
- id
- create_time
- update_time
- creator_id
- updater_id
- delete_flag
业务字段:
- password_value
- source_type (SYSTEM/MANUAL)
- remark
索引:
- idx_password_value
- idx_delete_flag
6.3 弱密码命中日志 password_blacklist_hit_log
字段:
- id
- user_id
- input_password_md5
- hit_password
- hit_time
作用:
- 安全审计
- 管理分析
七、SQL 脚本版本规划
路径规范。放在一个文件中
db/migrate
├── VXXX__create_password_policy.sql
八、交互流程设计
页面在提交/或者密码框失去焦点的时候,统一一次校验。
8.1 注册流程
输入邮箱/用户名 → 输入密码 → 提交 → 二次校验 → 创建账号
可能提示:
- 密码过短
- 命中弱密码
- 密码包含用户名
8.2 忘记密码流程
输入旧密码 → 输入新密码 → 提交(前端校验/后端校验) → 保存成功
加固方案
针对登录密码的弱口令问题,可以从预防、检测和响应三个方面采取多种加固方案。
🔒 弱口令加固方案
以下是详细的加固措施,帮助您构建更安全的密码策略:
I. 预防措施 (策略制定与强制执行)
这些方案旨在从源头阻止用户设置弱密码。
- 1. 强制复杂的密码策略
- 长度要求: 强制要求密码长度达到最低标准,例如至少 8个字符。
- 复杂度要求: 强制包含以下四类字符中的至少三类:
- 大写字母 (e.g., A, B, C)
- 小写字母 (e.g., a, b, c)
- 数字 (e.g., 1, 2, 3)
- 特殊符号 (e.g., !, @, #)
- 禁止使用用户名或邮箱: 密码中不得包含用户名、邮箱地址或其任何部分(如倒序、子串)。
- 2. 密码黑名单 (禁止使用常见弱密码)
- 维护一个包含常见、已被泄露或字典词汇的密码列表(如
123456、password、admin等)。 - 在设置新密码时,系统必须拒绝使用黑名单中的任何密码。
- 维护一个包含常见、已被泄露或字典词汇的密码列表(如
II. 检测与告警 (识别和处理现有弱口令)
这些方案用于识别系统中已经存在的弱密码或已被泄露的密码。
- 1. 离线弱口令扫描
- 在服务器端,定期或不定期使用包含大量字典和泄露密码的工具对密码哈希进行离线比对扫描。
- 注意: 仅使用密码哈希进行扫描,且扫描过程需严格保密,防止密码被二次泄露。
- 对于检测到的弱口令,立即通知用户,并强制其在登录时修改。
- 2. 联动泄露数据源
- 利用 Have I Been Pwned 等服务,检查用户的密码是否在已知的公开数据泄露事件中出现。如果出现,立即标记并强制用户修改密码。
III. 响应与增强 (弥补弱口令的防御不足)
即使密码强度不够,也要通过其他安全机制来阻止攻击。
- 1. 引入多因素认证 (MFA / 2FA) 🔑
- 这是最有效的加固措施之一。除了密码外,要求用户提供至少另一种认证因素(如:手机短信验证码、TOTP 应用生成的动态码、硬件密钥等)。
- 即使攻击者获得了弱口令,没有第二个因素也无法登录。
- 2. 账户锁定策略 (防暴力破解)
- 设置登录失败的次数限制。例如,在 5-10 次连续失败后,锁定账户一段时间(如 30 分钟)或直到管理员手动解锁。
- 3. 限制异地登录与异常行为检测
- 地理位置限制: 限制短时间内跨越地理距离(如从北京立即登录到纽约)的登录尝试。
- IP 地址白名单/黑名单: 允许或拒绝特定 IP 范围的访问。
- 行为分析: 监控用户异常的登录行为(如登录时间、设备变化、访问频率)。
- 4. 增强密码存储安全性
- 永远不要明文存储密码。
- 使用高强度、带有 Salt(加盐)的哈希算法,如 Argon2、bcrypt 或 scrypt。这些算法计算量大,能有效抵御彩虹表攻击和GPU暴力破解。
IV. 用户教育 (提高安全意识)
- 定期对用户进行安全教育,强调使用长且独特的密码的重要性,并鼓励他们使用密码管理器来生成和存储复杂密码。
💡 最佳实践总结
对于提升登录密码安全,引入多因素认证 (MFA) 和 强制执行强大的密码策略 (长度+复杂度+黑名单) 是最核心且最有效的两项措施。
一、什么是弱口令?不是“简单密码”那么肤浅
弱口令的本质定义是:
容易被猜中、推断、爆破、社工、字典攻击命中的密码。
它包括但不限于:
典型弱口令类型
1. 过于简单
- 123456
- 111111
- qwerty
- admin
2. 规则可预测
- Password123
- Abc@123
- test2024
3. 与个人信息高度相关
- 手机号
- 生日:19900101
- 名字拼音:zhangsan
4. 系统默认口令
- admin/admin
- root/root
- user/123456
5. 复用密码
- 在多个系统中使用同一密码
✅ 所以,“弱口令”不是某几个密码,而是一类可推断、可批量攻击的密码模式。
二、弱口令攻击通常是怎么发生的?
真实攻击路径往往是这样的:
扫描系统入口
-> 尝试默认账号
-> 字典爆破
-> 猜测规则密码
-> 登录成功
常见攻击方式:
| 攻击方式 | 描述 |
|---|---|
| 字典攻击 | 使用弱口令字典批量尝试 |
| 暴力破解 | 穷举组合 |
| 社工攻击 | 利用个人公开信息推测 |
| 撞库攻击 | 其他系统泄露的密码复用 |
⚠️ 很多系统并不是“被黑”,而是: 管理员账号密码是 admin123。
三、弱口令的危害不仅是“被登录”
弱口令的连锁反应往往包括:
- 数据泄露
- 权限提升
- 后门植入
- 横向渗透
- 服务器沦陷
- 数据库被脱库
很多安全事故的起点只有一句话:
密码太简单。
四、如何系统性避免弱口令?(核心重点)
靠“提醒用户别用简单密码”是没用的,必须制度化 + 系统化。
✅ 1. 强密码策略(Password Policy)
这是基础但必须:
推荐规则:
- 长度 ≥ 12 位(最低也应 8 位)
-
至少包含:
- 大写字母
- 小写字母
- 数字
- 特殊字符
-
禁止连续字符:
- 123456
- abcdef
示例规则:
密码规则:
- 8~20位
- 包含数字、字母、特殊字符
- 禁止与用户名相同
- 禁止连号
✅ 2. 弱口令字典检测
系统必须内置弱口令库,例如过滤:
- 常见弱口令列表(Top 10000)
- 常见规则变种
- 默认系统密码
当用户设置密码时:
if (password in weakPasswordList) {
reject
}
这一步非常关键,是很多系统没有做的。
✅ 3. 密码强度实时提示
不要只拒绝,而要引导:
UI 提示:
- 密码强度:弱 / 中 / 强
- 实时校验条
- 建议提示(例如:增加特殊字符)
用户体验 + 安全兼顾。
✅ 4. 登录保护机制(防爆破)
配置安全限制:
-
登录失败次数限制 例如:
- 5 次失败锁定 10 分钟
- 验证码机制
- 滑块验证
- IP 限流
建议配置示例:
连续失败 5 次 -> 锁定 15 分钟
同 IP 每分钟最大 10 次尝试
✅ 5. 禁止密码复用策略
企业级系统建议:
- 最近 N 次密码不可重复
- 密码历史记录不可重复(如最近 5 次)
这样可以防止: 用户今天改为 A,明天又改回原密码。
✅ 6. 强制周期更新策略
高安全系统推荐:
- 90 天强制修改密码
- 修改时必须不同于历史密码
适合: 运维后台 / 管理系统 / 财务系统。
✅ 7. 使用加密存储(不是明文)
密码存储原则:
❌ 明文保存 ❌ 可逆加密 ✅ 单向 Hash + Salt
推荐:
- bcrypt
- PBKDF2
- Argon2
存储结构:
password_hash: $2a$10$asasdasd...
salt: randomString
五、可落地的“弱口令防护体系”设计
推荐从这 6 层建设:
密码输入层
→ 规则校验
→ 弱口令检测
→ 强度评估
→ 安全存储
→ 登录防爆破
→ 审计监控
六、Passport 中的弱口令防护完整策略(推荐)
可直接用于你的 Passport 平台:
✅ 密码设置阶段
- 强度校验
- 弱口令字典过滤
- 用户信息匹配过滤
✅ 登录阶段
- 错误次数限制
- 验证码
- IP 风控
- 行为识别
✅ 运维阶段
- 定期扫描弱口令用户
- 强制修改提醒
- 安全报表预警
七、可直接落地的配置建议
推荐默认安全策略:
| 项目 | 推荐值 |
|---|---|
| 最小长度 | 10 位 |
| 错误锁定 | 5 次 |
| 锁定时间 | 15 分钟 |
| 密码有效期 | 90 天 |
| 禁止重用 | 5 次以内 |
| 强度级别 | 中等以上 |
八、总结:弱口令防护的核心理念
不是靠用户自觉,而是靠系统约束。
真正有效的策略只有三条:
- ▸ 系统强制,而不是提醒
- ▸ 从注册到登录全流程控制
- ▸ 安全策略可配置 + 可审计
终极总结一句话
弱口令不是用户问题,而是系统设计问题。
一个真正成熟的 Passport 系统,必须对弱口令实现:
- 主动发现
- 自动拦截
- 强制纠正
- 持续监控
如果你愿意,我可以继续帮你输出更落地内容:
✅ 弱口令检测算法设计(Java示例) ✅ Passport 密码规则配置模型 ✅ 密码强度评估算法 ✅ 安全审计表结构设计 ✅ 登录风控策略规则引擎方案
