首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

总结一:登录,注册,找回密码

(1)登录,注册 和 找回密码,数据肯定是前后端都需要进行校验的。

(2)前端input中写入的数据和后端获取数据的时候都需要trim()去空,否则数据入库的时候,可能会产生脏数据

(我的理解,脏数据是对于当前业务或者逻辑而言,不应该出现的数据,站在计算机的角度,它的出现是合理,一句话,自己代码的问题)。

(3)找回密码 和 注册:服务器三次交互

用户点击验证码图片,服务器收到请求后,生成一个4位(假设验证码是四个数字的图片)随机数,在根据某种算法生成一个永远不会重复的key,然后将这个随机数和key存入redis中。

(redis是非关系型数据库,用我的理解就是这个数据库只有两个字段,一个是key 一个是value),再生成一个cookie,cookie的值就是上面那个永远不会重复的key,这个cookie用于图片验证码的校验。

第二次:用户点击短信验证

用户点击手机短信验证,这时至少需要传递三个参数,手机号,图片验证码(就是那四个数字) 和 图片验证码的cookie。这里面有两个逻辑,如果,图片验证码验证失败,返回错误信息 ,否则,图片验证成功,发送手机短信,返回成功信息。

如何验证图片验证码?

从传来的cookie中取出值,拿着这个值去redis中找到之前放到里面的随机数,当这个随机数和用户传来的图片验证码的值相同,说明图片验证码验证成功,根据手机号,发送短信。(对了,图片验证码被验证成功之后,会被删除)

如何发送手机短信?

过程有一点点类似图片验证码,只不过呢这次不向前端传cookie,也是随机生成一个数字,作为手机验证码,然后将手机号进行算法处理生成一个数字作为key,然后将他俩存入redis中。还有一点要提,手机验证码是花钱的,没错,你没看错,就是花钱的!!!所以呢,为了降低成本,你应该记得有这样一个场景,点击手机验证码之后,会出现一个60秒到120秒不等的倒计时,就是为了让你少发短信,费钱!!!但是,如果你刷新一下页面,是不是发现依然不可以发短信,这是因为后端也做了时间校验。说白了就是通过手机号,再次存储一个有效时间在60秒到120秒之间的键值对在redis中。

怎么做的时间校验呢?

忘记告诉你了,redis在存储数据的时候可以设置时间限制,比如5分钟后失效......这里面具体怎么处理,请发挥你的想象力。

还有一个问题,代码怎么可能发送短信呢?这是移动和网通的活呀。我找呀找,找呀找,怎么也没找到。后来我才知道,短信服务,是需要花钱买的,你付完钱之后,人家给你一个接口,你把手机号和需要发的短信内容丢入接口里面,短信就发送成功了。

第三次:用户点击注册按钮。

这一次需要传递的数据就多了,除了图片验证码,剩下的数据都要传递。逻辑也很简单,如果,短信验证码验证失败,返回错误信息,否则,验证成功,将数据处理后入库,返回成功后的数据(也可以从定向到其它页面)。

短信验证过程就很清晰了,把手机号处理生成一个key值,根据这个key值,从redis中取出短信验证码,和前端传来的短信验证码作比较。还有一个非常重要的逻辑,短信验证码的值是有过期时间的,一般都很短。为什么要加一个过期时间呢?当然是出于安全考虑啦!!!别的不说,暴力破解听过吧。

到这里,注册和找回密码的最核心的验证就已经完事了。剩下的对于找回密码而言,就是update数据表,对于注册而言,就是insert数据表。

问一个问题?redis一共存储了几次数据?每次都起到什么作用?

三次。图片验证码存了一次,用于验证。短信验证存了两次,一次用于防止频繁提交,一次用于验证。

(4)登录:

只和服务器一次交互。

用户点击提交,向服务器传递用户名和密码。验证的逻辑是这样的:根据用户名,从数据库中取出密码和salt,对用户传来的密码进行上千次MD5加密(带salt的),然后对密码编码,然后再和数据库的密码做比较,如果相等则说明用户名和密码正确,然后几个cookie。

那么你可能会有疑问,这个过程好麻烦,难道每次成功登陆之后,和服务器通信都需要传递用户名和密码进行身份验证吗?

当然不是了,服务器在确认用户名和密码正确之后,会给你一些”身份证明“,就是一堆各种数据各种算法加密后的字符串,这些字符串,然后将这个字符串一份存入数据库,一份放入cookie中,一般cookie中会有token 或者 user_id类似的字眼,它们只有在你修改密码才会更改,只有在超过有效时间才会失效,一般有效时间都很长,有的甚至好几天。然后,你每次和服务器交互都要带着这些”身份证明“。

其实,你直接在浏览器注入cookie都可以跳过输入用户名和密码的阶段。你想一下如果有人获取了你浏览器的这些cookie,那么就相当于获取了你的用户名和密码......其实,xss攻击的本质就是盗取cookie。如下图

至于后端是如何对这些cookie进行验证的,这就要引出另一个知识点了:拦截器或过滤器。以前我以为java自带的filter和spring的拦截器是一种东西,后来我一查自来才知道,我天真了。这是个很大的知识点,现在知道个大概就够用了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180201G18QZL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券