`
touchinsert
  • 浏览: 1289756 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[技巧]你会做Web上的用户登录功能吗?

 
阅读更多

Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能。下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关系到用户安全的功能,希望大家能从下面的文章中能知道什么样的方法才是一个好的用户登录功能。

用户名和口令

首先,我们先来说说用户名和口令的事。这并不是本站第一次谈论这个事了。如何管理自己的口令让你知道怎么管理自己的口令,破解你的口令让你知道在现代这样速度的计算速度下,用穷举法破解你的口令可能会是一件很轻松的事。在这里我想告诉从开发者的角度上来做设计这个用户名和口令的事。下面一几件规则:

限用户输入一些非常容易被破解的口令。如什么qwert,123456,password之类,就像twitter限制用户的口令一样做一个口令的黑名单。另外,你可以限制用户口令的长度,是否有大小写,是否有数字,你可以用你的程序做一下校验。当然,这可能会让用户感到很不爽,所以,现在很多网站都提供了UX让用户知道他的口令强度是什么样的(比如这个有趣的UX),这样可以让用户有一个选择,目的就是告诉用户——要想安全,先把口令设得好一点。

千万不要明文保存用户的口令。正如如何管理自己的口令所说的一样,很多时候,用户都会用相同的ID相同的口令来登录很多网站。所以,如果你的网站明文保存的话,那么,如果你的数据被你的不良员工流传出去那对用户是灾难性的。所以,用户的口令一定要加密保存,最好是用不可逆的加密,如MD5或是SHA1之类的有hash算法的不可逆的加密算法。CSDN曾明文保存过用户的口令。(另,对于国内公司的品行以及有关部门的管理方式,我不敢保证国内网站以加密的方式保存你的口令。我觉得,做为一个有良知的人,我们应该加密保存用户的口令)

是否让浏览器保存口令。我们有N多的方法可以不让浏览器保存用户名和口令。但是这可能对用户来说很不爽。因为在真实世界里谁也记得不住那么多的口令。很多用户可能会使用一些密码管理工具来保存密码,浏览器只是其中一种。是否让浏览器保存这个需要你做决定,重点是看一下你的系统的安全级别是否要求比较高,如果是的话,则不要让浏览器保存密码,并在网站明显的位置告诉用户——保存口令最安全的地方只有你的大脑。

口令在网上的传输。因为HTTP是明文协议,所以,用户名和口令在网上也是明文发送的,这个很不安全。你可以看看这篇文章你就明白了。要做到加密传输就必需使用HTTPS协议。但是,在中国还是有很多网站的Web登录方式还在使用ActiveX控件,这可能成为IE6还大量存在的原因。我通常理解为这些ActiveX控件是为了反键盘记录程序的。不过,我依然觉ActiveX控件不应该存在,因为在国外的众多安全很重要的站点上都看不到ActiveX的控件的身影。

用户登录状态

首先,我想告诉大家的是,因为HTTP是无状态的协议,也就是说,这个协议是无法记录用户访问状态的,其每次请求都是独立的无关联的,一笔是一笔。而我们的网站都是设计成多个页面的,所在页面跳转过程中我们需要知道用户的状态,尤其是用户登录的状态,这样我们在页面跳转后我们才知道是否可以让用户有权限来操作一些功能或是查看一些数据。

所以,我们每个页面都需要对用户的身份进行认证。当然,我们不可以让用户在每个页面上输入用户名和口令,这会让用户觉得我们的网站想当的SB。为了实现这一功能,用得最多的技术就是浏览器的cookie,我们会把用户登录的信息存放在客户端的cookie里,这样,我们每个页面都从这个cookie里获得用户是否登录的信息,从而达到记录状态,验证用户的目的。但是,你真的会用cookie吗?下面是使用cookie的一些原则。

千万不要在cookie中存放用户的密码。加密的密码都不行。因为这个密码可以被人获取并尝试离线穷举。所以,你一定不能把用户的密码保存在cookie中。我看到太多的站点这么干了。

正确设计“记住密码”。这个功能简直就是一个安全隐患,我觉得并不是所有的程序员都知道怎么设计这个事。下面是一些方法供你参考。

1)在cookie中,保存三个东西——用户名登录序列登录token

用户名:明文存放。

登录序列:一个被MD5加密过的随机数,每次以输入口令的方式登录后更新。

登录token:一个被MD5加密过的随机数,仅一个登录session内有效,新的登录session会更新它。

2)上述三个东西会存在服务器上,服务器的验证用户需要验证客户端cookie里的这三个事。

3)为什么要设计这个样子?因为,

a)登录token是单实例登录。意思就是一个用户只能有一个实例。

b)登录序列是用来做盗用行为检测的。如果用户的cookie被盗后,盗用者使用这个cookie访问网站时,我们的系统是以为是合法用户,然后更新“登录token”,而真正的用户访问时系统发现,只有“用户名”和“登录序列”相同,但是“登录token”不对,这样的话,系统就知道,这个用户出现了被盗用的情况,于是,系统可以清除登录序列登录token,这样就可以令所有的cookie失效,并要求用户输入口令。并给警告用户系统安全。

不要让cookie有权限访问所有的操作。否则就是XSS攻击,这个功能请参看新浪微博的XSS攻击。下面的这些功能一定要用户输入口令:

1)修改口令。

2)修改电子邮件。(电子邮件通过用来找回用户密码)

3)用户的隐私信息。

4)用户消费功能。

找回口令的功能

找回口令的功能一定要提供。但是很多朋友并不知道怎么来设计这个功能。我们有很多找回口令的设计,下面我逐个点评一下。

千万不要使用安全问答。事实证明,这个环节很烦人,而且用户并不能很好的设置安全问答。什么,我的生日啊,我母亲的生日,等等。因为今天的互联网和以前不一样了,因为SNS,今天的互联比以前更真实了,我可以上facebook,开心,人人网,LinkedIn 查到你的很多的真实的信息。通过这些信息我可以使用安全问答来重设你的口令。Facebook的安全问答很强大,还要你通过照片认人。

不要重置用户的密码。因为这有可能让用户的密码遭到恶意攻击。当然,你要发个邮件给用户让其确认,用户点击邮件中的一个链接,你再重置。我并不推荐这样的方法,因为用户一般都会用笔记下来这个很记的口令,然后登录系统,因为登录系统时使用了“记住密码”的功能,所以导致用户不会去修改密码,从而要么导到被写下来的密码被人盗取,要么又忘记了密码。

好一点的做法——通过邮件自行重置。当用户申请找回口令功能的时候,系统生成一个MD5唯一的随机字串(可通过UID+IP+timestamp+随机数),放在数据库中,然后设置上时限(比如1小时内),给用户发一个邮件,这个连接中包含那个MD5的字串的链接,用户通过点击那个链接来自己重新设置新的口令。

更好一点的做法——多重认证。比如:通过手机+邮件的方式让用户输入验证码。手机+邮件可能还不把握,因为手机要能会丢了,而我的手机可以访问我的邮箱。所以,使用U盾,SecureID,或是通过人工的方式核实用户身份。当然,这主要看你的系统的安全级别了。

口令探测防守

使用验证码。验证码是后台随机产生的一个短暂的验证码,这个验证码一般是一个计算机很难识别的图片。这样就可以防止以程序的方式来尝试用户的口令。事实证明,这是最简单也最有效的方式。当然,总是让用户输入那些肉眼都看不清的验证码的用户体验不好,所以,可以折中一下。比如Google,当他发现一个IP地址发出大量的搜索后,其会要求你输入验证码。当他发现同一个IP注册了3个以上的gmail邮箱后,他需要给你发短信方式或是电话方式的验证码。

用户口令失败次数。调置口令失败的上限,如果失败过多,则把帐号锁了,需要用户以找回口令的方式来重新激活帐号。但是,这个功能可能会被恶意人使用。最好的方法是,增加其尝试的时间成本(以前的这篇文章说过一个增加时间成本的解密算法)。如,两次口令尝试的间隔是5秒钟。三次以上错误,帐号被临时锁上30秒,5次以上帐号被锁1分钟,10次以上错误帐号被锁4小时……

系统全局防守。上述的防守只针对某一个别用户。恶意者们深知这一点,所以,他们一般会动用“僵尸网络”轮着尝试一堆用户的口令,所以上述的那种方法可能还不够好。我们需要在系统全局域上监控所有的口令失败的次数。当然,这个需要我们平时没有受到攻击时的数据做为支持。比如你的系统,平均每天有5000次的口令错误的事件,那么你可以认为,当口令错误大幅超过这个数后,而且时间相对集中,就说明有黑客攻击。这个时候你怎么办?一般最常见使用的方法是让所有的用户输错口令后再次尝试的时间成本增加。

分享到:
评论

相关推荐

    Lotus Domino WEB详细 学习笔记

    38. DOMINO R5的域搜索功能在WEB上的实现 77 39. Display Rich Text fields in a view 86 40. Auto-Launch a file attachment 87 41. Showing a response count without showing the responses 89 42. ...

    Java EE Web开发实例精解完整光盘

    JAVA EE Web应用系统从逻辑上可划分为表现层、业务层和持久层,为了使读者对JAVA EE编程技术获得全面系统的了解,《Java EE Web开发实例精解》以JAVA EE Web应用系统的逻辑加构为主线,通过多个典型工程实例对上述三...

    CSS Web设计高级教程 第2版.part2

     解决浏览器兼容问题和开发功能性导航结构的技巧  通过CSS编码定制Web站点的方法  如何创建HTML Email模板和基本HTML表格布局,以及CSS在文中所起的作用  网格和布局对设计的重要性  本书读者对象 本书针对...

    黑客攻防技术宝典-Web实战篇(第2版) (图灵程序设计丛书•网络安全系列)_642194.mobi

    承载着丰富功能与用途的Web应用程序中布满了各种漏洞,攻击者能够利用这些漏洞盗取用户资料,实施诈骗,破坏其他系统等。近年来,一些公司的网络系统频频遭受攻击,导致用户信息泄露,造成不良影响。因此,如何确保...

    Lotus Domino WEB 开发技术积累-DOC(313页)

    38. DOMINO R5的域搜索功能在WEB上的实现 77 39. Display Rich Text fields in a view 86 40. Auto-Launch a file attachment 87 41. Showing a response count without showing the responses 89 42. 常用的几个...

    python web开发学习实录.part2

    李勇,本书共15章,由浅入深、全面系统地介绍了使用Python语言进行程序开发的知识和技巧。内容包括 Python 的安装和环境配置、Python的基本语法、流程控制、模块和函数、数据结构、字符串与正则表达式、面向对象编程...

    毕业设计基于web的智慧养老平台【源码+包运行成功】

    本资源是一个基于web的智慧养老平台的完整开发源码,包括前端、后端、数据库等部分。该系统主要提供自媒体社区服务,实现自媒体账号管理、内容发布、用户互动等功能,提高自媒体推广效率和用户体验。该系统支持自...

    Web.2.0动态网站开发—PHP技术与应用.part3.rar

    第3部分(第12~21章)为实例篇,介绍博客网站系统、基于~ax的留言板、新闻发布系统、为网站添加RSS功能、Wiki网站系统、网络论坛系统、网络邮件系统、网络校友录系统、网络聊天室、网站访问统计等10个系统的设计与...

    PHP和MySQL Web开发第4版pdf以及源码

    9.6 创建一个Web用户 9.7 使用正确的数据库 9.8 创建数据库表 9.8.1 理解其他关键字的意思 9.8.2 理解列的类型 9.8.3 用SHOW和DESCRIBE来查看数据库 9.8.4 创建索引 9.9 理解MySQL的标识符 9.10 选择列数据...

    计算机专业毕设ASP+ACCESS基于WEB网上留言板(源代码+论文).rar

    **计算机专业毕业设计:基于ASP与ACCESS的WEB网上留言板系统** **资源介绍:** ...通过学习和实践,可以帮助用户掌握ASP和ACCESS的基本用法,了解Web开发的基本流程和技巧,为未来的职业发展打下坚实基础。

    web-accessibility-tips:有关创建可访问的Web界面的提示和技巧

    Web辅助功能提示和技巧 以下可访问性提示和技巧介绍了一些构建可访问网页的技术方法。 辅助技术之间在如何处理规范方面存在分歧。 关于如何构建可访问的网页以及最佳使用方法,有很多意见。 以下提示和技巧是我如何...

    PHP和MySQL WEB开发(第4版)

    9.6 创建一个Web用户 9.7 使用正确的数据库 9.8 创建数据库表 9.8.1 理解其他关键字的意思 9.8.2 理解列的类型 9.8.3 用SHOW和DESCRIBE来查看数据库 9.8.4 创建索引 9.9 理解MySQL的标识符 9.10 选择列数据类型 ...

    图书管理系统.rar

    1. 完成一个具有完备用户登录验证功能的Web应用系统,系统主要包含两部分内容:一部分为用户登录模块,一部分为系统业务实现模块。 1.1 用户登录模块包括如下功能: l 检查用户的合法性实现安全登录。 l 新...

    C#开发经验技巧宝典

    第10章 Web页面设计 221 10.1 网页外观设计 222 0396 将CSS样式表应用到页面中 222 0397 在页面的源码中直接定义样式表 222 0398 动态加载主题到页面中 223 0399 利用Table布局Web页面 223 0400 ...

    知乎大神萧井陌web前端课程

    第5章 todo程序、todo的更新和删除、带用户功能的todo程序 第6章 jinja模板套路、类和其他、作业讲解 第7章 摘要算法、加盐保护密码-数据库索引原理、微博程序 第8章 传统数据库、sql注入和mongo安装使用、mongo日常...

    Ajiu AspWebServer V2.0 服务器 (版本号2.0.2.4)

    你会惊奇的发现现在只有627K了,功能不减(下个版本着重改善UI,如果时间允许的话 ) 2008-03-13 增加了两个功能:自定义出错信息和连接限制,界面全新改版,优化配置方式 2008-04-13 增加服务记录启动时间功能,小时钟,...

    基于javaWeb+mysql实现网上书城前后端管理系统(源码+数据库+开题报告+论文+答辩技巧+项目功能文档说明+项目运行指导

    本项目是一套基于JavaWeb和mysql实现网上书城前后端管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设...

    [计算机毕业设计]基于SSM的烘焙爱好者网站(源码+部署说明+演示视频+包运行).zip

    然而,由于烘焙技巧和食谱资源分散在各种书籍、博客和社交媒体上,使得人们很难快速地找到并学习感兴趣的烘焙内容。因此,开发一个烘焙爱好者网站具有很大的现实意义。 2. 项目功能: 本项目的主要功能如下: * ...

Global site tag (gtag.js) - Google Analytics