聊聊用户登录的那些事(浅谈用户登录背后的逻辑)

1.1、你的登录模块完善吗

用户登录这个功能想必大家都不陌生甚至于说是轻车熟路了,但是你的登录模块真的很完善吗?会不会依然潜藏着一些问题呢?

最近在做项目优化时不可避免的频繁接触登录模块(因为登录时前提嘛),但是仔细观察之下就发现存在这样或那样的问题。于是乎得出一个结论:之前的登录模块是不完善的,考虑的因素和场景不够细化。同时有了下面的一些思考。

二、用户登录背后的逻辑

2.1、传统实现

前端放置一个用户名和密码的表单,用户提交时后台在数据库中查询匹配的用户名及密码信息,如果匹配就登录成功,否则就登录失败!

2.2、潜在问题

这么简单的登录实现肯定是会潜在一系列问题的,比如:

① 缺失前端的判空处理

② 明文密码,不安全

③ 重复提交

④ 恶意访问

三、登录实现的自我规范

项目开发中,登录模块的前后端需要着重注意一下几点:

3.1、密码安全

① 禁止请求中的明文密码,需加密后进行请求

② 网站启用https

3.2、数据规范

① 表单文本框、密码框的最大最小长度

② 规范性检测,比如:手机号,邮箱等的有效性检测

③ 表单必填项为空时不允许进行提交,并给出提示

3.3、逻辑处理和准确响应

① 后端建议按照:参数校验 -> 数据检查 -> 属性判断 -> 场景处理 -> 准确返回 的流程进行

② 先进行参数的合法性验证,不合法数据在开始就扼杀在萌芽之中,因为你的接口并不只有前端能调用的到,随便一个调试工具都可以模拟请求

③ 在做数据检查时要逻辑层次清晰,比如先检查用户是否存在,再检测用户的合法性和权限,最后准确返回信息(DTO)

④ 如果遇到异常,按照逻辑层次划分准确响应信息回执,不能一股脑的返回一个类似:请求异常之类的

四、程序的安全性保证

这部分更多的是在后端的一些处理,正如上面所说的:你的接口不仅仅是自己在用!

4.1、重复登录

不管是使用者网络卡住了,还是有人恶意发送登录请求,这些都可以作为重复登录来进行处理。这部分涉及到前端和后端,都需要做这部分的拦截。详情可看我之前的一篇文章:

自定义注解实现重复性提交拦截

4.2、强刷接口

如果考虑到不排除有人会强刷接口,及时你的服务器抗住了也是一个不小的负担!所以我们上面的重复登录验证还要更细化一些。比如:

① 10分钟内超过三次的重复(记录在redis中超时10分钟),则提示需要等一等

② 前端加入验证,比如:滑块验证、12306的登录点击验证等(图片码已经被玩烂了)

PS:后面我也会出一个Nuxt整合图片滑块验证的文章(已经实现了,还没输出文章…)

③ IP检测,能排除一部分的恶意刷接口,但是无法应对那些使用代理换着刷的!而且一个公司或组织的根IP是一样的很容易导致误封

4.3、暴力破解

在恶意请求的基础上,不断尝试匹配用户名、密码、单号这些数据以期能做数据的暴力破解。所以在防止盗刷,重复提交的同时应该规范数据安全,比如:密码必须英文大小写和数据全部存在…

4.4、登录验证

我们上面说到超出3次就提示用户等一下、前端滑块验证等措施。那除了这些还有更简单有效的手段:手机短信或邮箱验证在请求次数超出限制后生成一个验证码发送到手机短信或者邮箱,用户必须匹配了code后才能正常请求。

声明:本文由网站用户竹子发表,超梦电商平台仅提供信息存储服务,版权归原作者所有。若发现本站文章存在版权问题,如发现文章、图片等侵权行为,请联系我们删除。

(0)
上一篇 2023年2月18日 10:34:51
下一篇 2023年2月18日 10:44:55

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注