电子说
用户登录是系统中最重要的功能之一,登录成功就能拥有系统的相关使用权限。所以设计一个安全的登录流程是十分必要的。保护用户账号不被黑客窃取,既是在保护用户的基本利益,更是在保护网站的信誉和业务发展。
流程安全性
安全的登录流程必须使用 HTTPS 协议。HTTPS 协议具有较高的安全性,可以保证数据传输过程的安全。虽然有 fiddler 等代理方式可以截取数据,但一般情况下没有用户的配合也无法截取。HTTPS 证书可以在阿里云申请,个人站点可以直接用免费版,非常方便。nginx 和 Spring Boot 的配置也非常简单。
登录一定要有人机验证机制,可以防止黑客以暴力破解的方式尝试登录。通常可以用图片验证码,并且图片要加干扰线,使用不同的字体、大小写提高识别难度。目前有打码平台和 AI 方式可以识别图片验证码,但是成本比较高。一些大型网站已经在使用新的验证方式,比如拖动鼠标移动滑块或者把一个倾斜的图片扶正,攻击的难度还是比较高的。
一定要注意防范 XSS、CSRF 攻击。攻击者通过在目标网站上注入恶意脚本,可以在其他用户的浏览器上运行脚本。利用这些恶意脚本,攻击者可获取用户的敏感信息。用户提交的任何数据都要保持怀疑态度,不能完全信任,该过滤就过滤,该拦截就拦截。国内大型网站,比如淘宝也存在过 CSRF 漏洞,可见大家对这种攻击形式还比较陌生。
后台登录代码要注意防范 SQL 注入攻击。如果黑客提交 password or 1 = 1 而后台没做 SQL 防注入,只是查询下数据是否存在,有可能就攻击成功了。所以 or 1 = 1 有个响亮的名字,叫万能密码。恐怕大家在做大学作业的时候,都有这个漏洞吧。
登录成功后,返回的 cookie 要设置 httponly、secure,这样就无法通过 js 脚本获取 cookie,可以防止跨站攻击,增加爬虫程序的难度。cookie 有效期根据业务需求决定,尽量短一些。曾经我也做过爬虫,爬网银的时候就处理过很多这样的 cookie,比普通 cookie 复杂很多。
如果使用手机短信登录,一定要控制验证码的时效性,即验证码一次有效 5 分钟,一分钟内只能发送一次。有必要时可以单点登录,其他设备登录后,本设备自动失效。也可以使用第三方授权登录接口,如微信登录等,优化用户登录体验,安全性更好。
密码安全性
尽量提升密码强度。一般来说,长度要 8 位以上,必须同时包含数字、小写字母、大写字母,建议用户使用特殊字符。
重置密码,最好通过邮箱发送一定时间内有效的重置链接,或者手机短信验证码,甚至两者相结合的方法。安全要求特别高的场景,比如股票交易软件,有的设计了一个单独的动态密码 APP,通过算法比对动态密码。密码保护问题在今天隐私满天飞的时代背景下,可能已经不那么安全了。
用户名密码错误提示含糊一些。无论是用户名还是密码错误,统一提示“用户名或密码错误”,不要给用户明确的提示。这样会在一定程度上让忘记用户名的用户难以登录,可以辅助一个用户名找回机制或允许使用邮箱、手机号进行登录。
不要在浏览器中明文保存用户名、密码,md5 加密也不行。如果要自动登录,可以保存 RSA 加密后的密文,通过 cookie 提交密文进行解析来自动登录。md5 或者 md5(md5) 在今天已经不安全了,黑客的彩虹表可能已经覆盖了大多数数据了。
保护好用户
密码落库必须加密。CSDN当年使用明文存储密码导致被脱裤后完全公开了用户密码,给用户和网站带来了极大的风险。基于彩虹表能够很方便地破解 md5、sha1 等古老算法的密文,建议至少使用 sha256 及以后的算法,并且加密过程加盐。盐的长度最好也要在 64 位以上。如果条件允许,给每个用户设计一个独有的盐值,将极大提升安全性。
数据库要保留用户的历史密码,修改密码时,不能和前几次一样。如果黑客掌握了某个历史密码,也可能在用户改回后恰好就对上了。参考 Google 账号登录,修改密码和 6 个月前的一样都是不行的。
保留用户的登录记录。时间、ip 都需要。如果本次 ip 和以前的有较大的差别,可以通过邮箱、短信、站内信等向用户提示,建议用户修改密码。用户长时间没有登录,后续再登录的时候最好强制修改密码,并且和历史密码不重复。
短时间内登录失败,要锁定用户。比如失败 5 次可以锁定 1 小时,再次失败锁定 8 小时,又失败锁定 24 小时。锁定后,用户可以通过注册邮箱或手机短信实现解锁,但一天内也要限制解锁次数。
即使在用户登录后,进行重要操作的时候,也要求用户重新输入一次密码。比如修改密码、修改绑定邮箱、修改密码保护问题、有消费行为等,可以防止用户被 XSS 攻击后黑客修改重要数据。
总结
本文梳理了设计登录流程需要考虑的一些关键点。世界上没有绝对安全的系统,有价值的网站和应用都是黑客攻击的重点对象。工作中务必重视安全问题,发现漏洞及时修复。也要考虑网站数据的重要程度,采取合适的防护措施。
责编AJX
全部0条评论
快来发表一下你的评论吧 !