对于系统登录流程的一些理解和总结

作者 梦想.家 日期 2014-07-15 字数 2.2k
对于系统登录流程的一些理解和总结

登录的意义

我们常常会发现在一些网站上登录是非必须的,比如一些浏览性的网站(网易新闻,百度图片),但是用户在使用像QQ空间,微博,人人网等这些网站的时候必须要用户登录后才能使用!暂且不分析为什么有的网站需要登录有的不需要登录,这和每个网站的理念也是有关系的,所以我们只着重分析登录的作用和意义,在我看来登录的作用应该有以下几点:

  1. 登录过程其实是一个对用户身份认证的过程,只有登录了系统,系统才会识别出你是谁,谁在使用自己!例如现在大数据时代已经到来,用户登录后才能分析每个用户的用户习惯!

  2. 登录过程后才能针对不同的用户进行相应的权限控制!例如一些OA系统登录用户不同那么登录成功后所看到的东西是不一样的。

  3. 登录过程后才能针对不同的用户产生的信息(资源)进行管理!例如像博客,sns,微博这样的网站登录后都会给你生成一个个人主页,你可以查看和修改自己的资源,也可以在别人的主页去查看别人你可以查看的资源

上面列举了这几点其实总结下核心就一条,“登录过程是区分系统与用户,用户与用户之间的唯一凭证”。

百度百科对于登录的解释:供多人使用的网站或程序应用系统为每位用户配置了一套独特的用户名和密码,用户可以使用各自的这套用户名和密码来使用系统,以便系统能识别该用户的身份,从而保持该用户的使用习惯或使用数据。用户使用这套用户名和密码来进入系统的过程,以及系统验证进入是成功或失败的过程,称为“登录”。

登录流程

一个简单的登录流程如下图所示,用户输入用户名和密码开始登录,用户名和密码传递到后台进行判断,密码正确进入系统,密码错误返回登录页面,重新输入用户名和密码进行登录。

login

登录过程的安全性

对于绝大多数网站和系统的登录过程是必须的而且在一个系统中是非常重要的,尤其像网上银行,支付宝,社交网站,这些网站上都有用户的敏感信息以及账户金额等信息,如果帐号别人盗用,那么后果是不堪设想的!所以登录过程的安全性尤为重要,当然用户因为其它原因泄漏密码和用户名的情况不再本文的讨论范围之内,下面针对登录流程中涉及到的安全性问题进行简单的说明!

暴力破解

上图简单的登录流程中其实是有很大的漏洞,因为可以在不知道用户名和密码的情况下进行无限次数的登录尝试,这样就可以用程序去写一个机器人去不断循环遍历密码进行暴力破解,下面我们就在这个基本的登录流程的基础上去一步步优化这个登录流程。

防止暴力破解现在很多网站用的一种方式就是在登录时候加一个图片验证码,加过验证码的登录流程图如下:

login

加入图片验证码后每次登录时不但要输入用户名,密码,还要输入图片验证码上面的内容,然后把这些数据提交到后台,首先判断验证码是否正确,如果正确,程序就直接返回验证码有误,如果验证码正确,然后才判断用户名和密码是否正确,密码正确才进入系统。

修改后的登录流程已经可以防止暴力破解了,普通的系统和网站使用这样的方式已经可以了,但是对于银行和支付宝等这些安全性更高的网站来说还是不够的,那么银行和支付宝这些网站是怎么做的呢,限制用户密码输错的次数!下面看看如果这样修改后系统的登录流程。流程图如下:

login

经过修改后的流程图中可以看出,即使可以伪造或者读取验证码绕过验证码这一层,那么最多也就10次尝试的机会,输错10次后今天就不能在登录了。

sql注入

通过上面登录流程的修改暴力破解已经得到了有效的控制,但是还有一个安全性的问题那就是sql注入,不过现在的网站上已经很少存在这种情况了,sql注入这一块主要注意的就是要把用户的输入中的特殊的字符给过滤掉,sql语句中需要的值通过参数的形式传递进去,不要用字符串的形式去拼一个sql语句,由于这块涉及到具体的编程一两句话也说不清楚就不详细写了,只要保证用户输入的数据是合法的,那么就不会存在SQL注入

网络传输的安全性

传统的HTTP协议在网络中传输数据的时候都是明文传输,那么通过网络抓包工具抓住登录时候发送的数据包那么就可以获取里面的明文的用户名和密码,所以登录使用HTTPS(安全的超文本传输协议),使用HTTPS后即使通过网络抓包工具抓到数据包,那么数据包里面的内容也是加过密的,是没有利用价值的。

登陆过程中的用户体验

安全性很重要,上面改进过的登录过程已经很安全了,至少不会存在暴力破解了,但是用户体验在现在的互联网中也是很重要的,所以我们就要在安全性和用户体验中寻找一个平衡点,所以还要对上面的安全验证做一些改进,以至于达到我们理想的需求。

对用户体验的改进目前就想到了验证码,比如当用户名或者密码输错3次后才显示验证码,这样子对于真正的用户来说,避免了他输入没有意义的验证码。

总结

通过安全性和用户体验对登录流程做了一些简单介绍,这些都是在实际的项目中和在使用别人的软件的时候总结出来的,当然具体实现的时候还有很多的具体的细节需要去注意和完善。任何一个小的系统或者模块把它做好,做到极致都是不容易的,你需要去花费很多的时间和精力去设计它。

后记

  • 使用单点登录,这样同一时刻一个账户只能在一个地方登录,当你登录系统的时候,过一会发现自己被踢下线,那么说明你的帐号已经在别处登录,如果不是用户自己在其它浏览器中登录,那么用户就应该想到自己的账户是否已经被盗!

  • 国外的一些网站,如google,dropbox,evernote等,都有一个二次验证机制,当用户正确输入用户名称和密码的时候,如果用户开启了二次验证,还会要求用户输入一个手机接收到的具有有效期的验证码!evernote的这项服务需要高级用户才能使用。

  • 有一些网站的验证码不是纯碎的一些字母,而是一个问题或者一道数学题,比如5+7=?用户只需要填写答案就行,这也有效的提高了破解验证码的难度。

  • 网易将军令这种动态密码保护器也是有效降低帐号被盗风险的一种好的方式。

  • 在设计记住密码这个功能的时候,一定不要把用户的密码保存到本地,即使是加过密的密码!



本文完

本文如有误,请不吝赐教!

原文标题:对于系统登录流程的一些理解和总结

原文链接:https://www.wuhuan.me/2014/07/15/login/

版权声明:保留署名-非商业性使用-禁止演绎 4.0 国际 | Creative Commons BY-NC-ND 4.0