Web安全之业务安全:用户凭证安全存储与传输详解
字数 1467 2025-12-05 04:43:54
Web安全之业务安全:用户凭证安全存储与传输详解
题目描述
用户凭证(如密码、Token、Session ID等)的安全存储与传输是业务安全的核心环节。攻击者常通过中间人攻击、数据库泄露等方式窃取凭证,因此需要采用加密、哈希、安全传输等技术保障凭证生命周期安全。本题将深入探讨凭证存储策略(如加盐哈希)、传输安全机制(如HTTPS、Secure属性)及常见攻击防护。
解题过程
1. 用户凭证的安全存储
问题:明文存储密码或弱加密易在数据库泄露时导致批量用户信息被盗。
解决方案:
- 哈希函数:使用不可逆算法(如SHA-256)将密码转化为固定长度的哈希值。但单纯哈希仍易受彩虹表攻击(预先计算常见密码的哈希值进行匹配)。
- 加盐(Salting):为每个密码生成随机字符串(盐),与密码组合后再哈希。盐需唯一且足够长(如16字节),存储于数据库中。示例:
哈希值 = SHA256(密码 + 唯一盐)
攻击者无法直接使用通用彩虹表,需针对每个用户单独破解。 - 慢哈希函数:故意降低哈希计算速度,增加暴力破解成本。例如:
- PBKDF2:通过多次迭代(如10万次)延长计算时间。
- bcrypt:内置盐机制并自适应计算成本。
- Argon2:抵抗硬件加速攻击,兼顾内存与计算复杂度。
2. 用户凭证的安全传输
问题:网络传输中若未加密,凭证可能被中间人窃取(如公共Wi-Fi嗅探)。
解决方案:
- HTTPS(TLS/SSL):
- 加密传输层:通过非对称加密协商对称密钥,后续通信使用对称加密(如AES)。
- 证书验证:确保客户端与可信服务端通信,防止伪造服务器钓鱼。
- Cookie安全属性:
Secure:仅通过HTTPS传输,避免HTTP明文泄露。HttpOnly:阻止JavaScript访问Cookie,防御XSS窃取会话ID。SameSite:限制跨站请求携带Cookie,防御CSRF攻击(可选Strict/Lax)。
3. 会话管理中的凭证保护
问题:会话ID若处理不当,易被劫持或固定攻击。
解决方案:
- 会话超时:设置合理过期时间(如30分钟无操作则失效),减少被盗用窗口。
- 登录后刷新会话ID:用户登录后生成新会话ID,避免会话固定攻击(攻击者诱导用户使用已知ID)。
- Token绑定:将Token与设备指纹(如IP、User-Agent)绑定,异常访问时强制重新认证。
4. 常见攻击与防护策略
- 重放攻击:窃取凭证后重复使用。防护方法:
- 添加时间戳与随机数(Nonce),服务端校验请求唯一性。
- 使用一次性Token(如JWT的jti字段)。
- 中间人攻击:强制使用HTTPS并启用HSTS(强制浏览器跳转HTTPS)。
- 数据库泄露:
- 分层加密:敏感字段(如密码)哈希存储,非敏感字段(如邮箱)可加密存储。
- 密钥管理:使用硬件安全模块(HSM)或云服务密钥管理(如AWS KMS)。
5. 实践示例:密码存储流程
- 用户注册时生成随机盐。
- 计算加盐哈希:
hash = bcrypt(密码, 盐, 成本因子)。 - 数据库中存储
盐 + 哈希值,切勿存储密码明文。 - 登录时:用存储的盐与输入密码重新计算哈希,与数据库哈希比对。
总结
用户凭证安全需覆盖存储、传输、验证全链路。核心原则是:
- 存储时通过加盐慢哈希提升破解成本;
- 传输时依赖HTTPS与安全属性防止拦截;
- 验证时结合会话管理与风险检测动态防护。
定期审计凭证处理逻辑,遵循最小权限原则,可显著降低业务安全风险。