浅析用户登录功能实现

2021-05-18 09:46:07  晓掌柜  版权声明:本文为站长原创文章,转载请写明出处


一、前言

    

    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后才能正常请求。


五、后记

    

    以上就是我关于登录功能是一些想法和实现,如果有不妥之处或者你有更好的方案,欢迎在评论区进行讨论。

    更多精彩,请持续关注:guangmuhua.com


最新评论: