2021-05-18 09:46:07 晓掌柜 版权声明:本文为站长原创文章,转载请写明出处
用户登录这个功能想必大家都不陌生甚至于说是轻车熟路了,但是你的登录模块真的很完善吗?会不会依然潜藏着一些问题呢?
最近在做项目优化时不可避免的频繁接触登录模块(因为登录时前提嘛),但是仔细观察之下就发现存在这样或那样的问题。于是乎
得出一个结论:之前的登录模块是不完善的,考虑的因素和场景不够细化。同时有了下面的一些思考。
前端放置一个用户名和密码的表单,用户提交时后台在数据库中查询匹配的用户名及密码信息,如果匹配就登录成功,否则就登录失败!
这么简单的登录实现肯定是会潜在一系列问题的,比如:
① 缺失前端的判空处理
② 明文密码,不安全
③ 重复提交
④ 恶意访问
项目开发中,登录模块的前后端需要着重注意一下几点:
① 禁止请求中的明文密码,需加密后进行请求
② 网站启用https
① 表单文本框、密码框的最大最小长度
② 规范性检测,比如:手机号,邮箱等的有效性检测
③ 表单必填项为空时不允许进行提交,并给出提示
① 后端建议按照:参数校验 -> 数据检查 -> 属性判断 -> 场景处理 -> 准确返回 的流程进行
② 先进行参数的合法性验证,不合法数据在开始就扼杀在萌芽之中,因为你的接口并不只有前端能调用的到,随便一个调试工具都可以模拟请求
③ 在做数据检查时要逻辑层次清晰,比如先检查用户是否存在,再检测用户的合法性和权限,最后准确返回信息(DTO)
④ 如果遇到异常,按照逻辑层次划分准确响应信息回执,不能一股脑的返回一个类似:请求异常之类的
这部分更多的是在后端的一些处理,正如上面所说的:你的接口不仅仅是自己在用!
不管是使用者网络卡住了,还是有人恶意发送登录请求,这些都可以作为重复登录来进行处理。
这部分涉及到前端和后端,都需要做这部分的拦截。详情可看我之前的一篇文章:
如果考虑到不排除有人会强刷接口,及时你的服务器抗住了也是一个不小的负担!所以我们上面的重复登录验证
还要更细化一些。比如:
① 10分钟内超过三次的重复(记录在redis中超时10分钟),则提示需要等一等
② 前端加入验证,比如:滑块验证、12306的登录点击验证等(图片码已经被玩烂了)
PS:后面我也会出一个Nuxt整合图片滑块验证的文章(已经实现了,还没输出文章...)
③ IP检测,能排除一部分的恶意刷接口,但是无法应对那些使用代理换着刷的!而且一个公司或组织的根IP是一样的
很容易导致误封
在恶意请求的基础上,不断尝试匹配用户名、密码、单号这些数据以期能做数据的暴力破解。所以在防止盗刷,重复提交的同时
应该规范数据安全,比如:密码必须英文大小写和数据全部存在...
我们上面说到超出3次就提示用户等一下、前端滑块验证等措施。那除了这些还有更简单有效的手段:手机短信或邮箱验证
在请求次数超出限制后生成一个验证码发送到手机短信或者邮箱,用户必须匹配了code后才能正常请求。
以上就是我关于登录功能是一些想法和实现,如果有不妥之处或者你有更好的方案,欢迎在评论区进行讨论。
更多精彩,请持续关注:guangmuhua.com