← 返回首页

登录系统需要守住哪些安全边界

梳理密码存储、会话管理和风险控制中的关键环节。

五月做登录模块复查时,我拿两个不存在的账号试了试。一个提示“用户不存在”,另一个真实账号输错密码时提示“密码错误”。站在开发者角度,这很贴心;站在试探账号的人那边,也同样贴心。

我把提示统一成“账号或密码错误”,然后顺着登录流程往下看。原本以为只是改一句文案,结果翻出了不少藏在角落里的问题。

密码不能直接锁进抽屉

项目没有保存明文密码,这点还好,但旧代码使用的计算方式已经不太合适。我换成专门的密码哈希算法,为每个密码使用独立随机盐,并根据当前机器能力调整计算成本。

连续失败也加了限速,不过没有只按网络地址一刀切。公司、学校和家庭网络可能共用出口,封住一个地址,往往会让无辜的人一起站在门外。

退出真的要退出

另一个问题更实际:用户修改密码后,旧设备上的会话还活着。页面显示“修改成功”,那台旧手机却依然可以继续访问。

现在密码修改、主动退出和权限撤销都会让相关会话失效。会话标识保持随机且短期有效,浏览器里的安全属性也补齐。修改密码、绑定设备这类高风险操作,还会要求用户重新验证一次。

最后我又检查了接口权限。前端把按钮藏起来不叫授权,真正的判断必须留在服务端。认证只说明来的人是谁,授权才决定哪扇门能开。

登录页看着只有两个输入框,背后却像一串门锁。安全不是把门做得难用,而是每把钥匙都能说明去向,丢了以后也确实可以作废。