密码明文存储如何整改

wen 网络安全 25

本文目录导读:

密码明文存储如何整改

  1. 第一阶段:紧急止血(立即执行)
  2. 第二阶段:核心技术整改(系统改造)
  3. 第三阶段:纵深防御(长期加固)
  4. 第四阶段:验证与监控
  5. 整改清单

针对“密码明文存储”的安全隐患,整改的核心原则是:永远不存储明文密码,只存储密码的哈希值,并配合使用“加盐”技术

以下是具体的整改步骤和最佳实践方案,按照从紧急到长期的顺序排列:

第一阶段:紧急止血(立即执行)

停止所有明文存储行为

  • 排查代码:立即查找所有数据库中 passwordpwdpasswd 等字段,以及日志文件、配置文件、缓存中是否存在明文密码。
  • 切断源头:修改代码逻辑,在用户注册、修改密码、管理员创建用户等入口处,立即增加哈希处理,确保存入数据库的已经是哈希值,而非明文。

清理历史明文数据(高优先级)

  • 通知用户必须立即强制所有用户修改密码(通过邮件、短信或应用内通知),因为已经泄露的历史明文密码风险极高,攻击者可能已利用。
  • 数据脱敏:将数据库中所有已存在的明文密码字段,用占位符(如 [HASHED_PASSWORD])或空字符串替换,并删除备份中可能存在的明文数据
  • 日志清理:清除所有包含明文密码的应用日志、错误日志、调试日志。

第二阶段:核心技术整改(系统改造)

核心方案:使用强哈希算法 + 随机盐值

切勿使用 MD5 或 SHA-1 等快速哈希算法(硬件算力可快速破解),必须使用计算慢、抗暴力破解的专用密码哈希算法。

推荐算法(二选一)

方案 算法 特点 适用场景
方案A(首选) bcrypt 内建盐值,可调节计算成本,抗GPU/ASIC攻击强,公认标准。 绝大多数Web应用、API、移动端。
方案B(替代) Argon2 2015年密码哈希竞赛冠军,抗并行计算更强,配置灵活。 对安全性要求极高的金融、政务系统。

整改步骤(以 bcrypt 为例)

  1. 引入库:在项目中引入官方或社区认可的 bcrypt 库(如 Java 的 jBCrypt,Python 的 bcrypt,Node.js 的 bcryptjs)。
  2. 修改注册逻辑
    • 用户输入密码 myP@ssword123
    • 代码调用 bcrypt 库的 hashpw() 函数,自动生成一个随机盐值并嵌入到哈希结果中。
    • 将最终结果($2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy)存入数据库。
    • 注意:无需单独存储盐值,bcrypt结果已自带。
  3. 修改登录逻辑
    • 用户输入密码。
    • 从数据库取出该用户的哈希值(例如上述字符串)。
    • 调用 checkpw(rawPassword, storedHash) 函数。
    • 函数自动从哈希值中提取盐值,对明文进行哈希,然后比较结果。
  4. 修改旧用户密码:无法通过旧明文直接迁移,必须执行第一阶段中的强制重置密码流程。

第三阶段:纵深防御(长期加固)

传输层加密(HTTPS)

  • 即使存储安全,如果密码在传输过程中被嗅探,依然等于明文。全站强制开启 HTTPS,防止中间人攻击。

密码策略

  • 强度要求:至少8位,包含大小写字母、数字、特殊字符,且不允许常见弱密码(如123456password)。
  • 防重复使用:在注册或修改密码时,通过API查询常见泄露密码数据库(如 Have I Been Pwned 的 Pwned Passwords API),禁止使用已知泄露密码。
  • 锁定策略:连续多次(如5次)登录失败,临时锁定账户15-30分钟,防止暴力破解。

数据库安全

  • 最小权限原则:应用连接数据库的账号,仅拥有对密码相关表(如user表)的SELECTUPDATE权限,严禁DROPDELETE等危险权限。
  • 审计日志:记录所有对密码表的异常访问(如批量SELECT、非工作时间查询)。

开发与运维规范

  • 密码不落入代码:禁止在代码、配置文件、环境变量、注释中硬编码任何密码、令牌或密钥,使用专门的密钥管理服务(如 AWS Secrets Manager, HashiCorp Vault)。
  • 代码审计:部署自动化扫描工具(如 SonarQube, Checkmarx)检测硬编码密码、弱哈希等安全漏洞。
  • 日志脱敏:配置日志框架,在输出前自动脱敏掉 password, secret, token 等字段的内容。

第四阶段:验证与监控

  • 渗透测试:定期聘请安全团队进行黑盒测试,验证密码存储和传输的安全性。
  • 入侵检测:部署WAF(Web应用防火墙)和IDS(入侵检测系统),监控异常登录、批量注册、密码枚举行为。
  • 事件响应预案:制定一旦发现密码泄露(比如GitHub仓库意外暴露)后的紧急处理流程。

整改清单

步骤 紧急程度
1 强制所有用户重置密码 立即
2 清理代码和数据库中的明文密码 立即
3 引入 bcrypt/Argon2 对密码做哈希+加盐处理 24小时内
4 全站部署HTTPS 1周内
5 实施密码强度策略和登录锁定机制 1周内
6 建立代码审计和日志脱敏机制 1个月内
7 部署持续的安全监控与定期渗透测试 长期

最重要的一句话永远不要自己写加密函数,永远使用经过广泛验证的、由安全专家维护的标准库(如 bcryptArgon2)。

抱歉,评论功能暂时关闭!