如何设计安全的用户登录功能

用户登录功能是Web应用系统具备的最基本的功能,关系到用户数据和应用系统数据的安全,设计一个安全的用户登录功能,涉及到以下几个方面的内容。
(一) 老生常谈——口令
1. 口令长度与复杂度限制
限制用户输入一些非常容易被破解的口令,比如qwert、asdfg、123456、password之类的,参考twitter和 facebook的设计,为这样的口令做一个黑名单,不允许使用黑名单中的口令。同时,还对用户口令的长度、复杂度进行检查,要求用户设置足够长度,且复 杂度符合安全策略的口令。
在口令安全的这个方面,用户体验和安全可能是相对的。限制用户输入某些口令及口令的长度和复杂度,在用户体验方面可能并不太好。所以,很多成功且 设计良好的社交网站(SNS)都提供了UX让用户知道他的口令强度是什么样的,这样可以让用户有一个选择,目的就是告诉用户——要想安全,先把口令设得好 一点。
2. 不要明文保存用户的口令
用户都会用相同的ID相同的口令来登录很多网站。所以,如果Web应用系统明文保存口令的话,那么,数据被不良员工流传出去那对用户将是灾难性的。所以,用户的口令一定要加密保存,最好是用不可逆的加密,但不要直接使用诸如MD5或是SHA1之类加密算法。
3. 不要让浏览器保存口令
浏览器记住口令,对用户来说是很方便的事,因为用户不可能记住那么多的口令,只能借助于某些工具帮助记忆,浏览器只是其中的一种。但对于用户数据的安全来说,有很多方法可以获取浏览器记住的口令。所以,不要让浏览器保存用户名和口令。
(二) 用户登录状态
HTTP是无状态的协议,是无法记录用户访问状态的。用户的每次请求都是独立的无关联的,一笔是一笔。而我们的Web应用系统都是设计成多个页面 的,在页面跳转过程中我们需要知道用户的状态,尤其是用户登录的状态,这样我们在页面跳转后我们才知道是否可以让用户有权限来操作一些功能或是查看一些数 据。
我们每个页面都需要对用户的身份进行认证。当然,我们不可能让用户在每个页面上输入用户名和口令。为了实现这一功能,Web应用系统会把用户登录 的信息存放在客户端的Cookie里,每个页面都从这个Cookie里获得用户是否登录的信息,从而达到记录状态,验证用户的目的。但是,Cookie的 使用并不是简单的事,下面是使用Cookie的一些原则。
1. 千万不要在Cookie中存放用户的密码
千万不要在Cookie中存放用户的密码,加密的密码都不行。因为这个密码可以被人获取并尝试离线穷举。所以,一定不能把用户的密码保存在Cookie中。
2. 正确的设计“记住密码”
这个功能简直就是一个安全隐患,通常的设计是用户户勾选了这个功能,系统会生成一个Cookie。Cookie包括用户名和一个固定的散列值,这个固定的散列值一直使用。这样,可以在所有的设备和客户上都可以登录,而且可以有多个用户同时登录。更安全一点的做法是:
1) 在Cookie中,保存三个东西——用户名,登录序列,登录Token
 用户名:明文存放。
 登录序列:一个被MD5散列过的随机数,仅当强制用户输入口令时更新(如:用户修改了口令)。
 登录Token:一个被MD5散列过的随机数,仅一个登录Session内有效,新的登录Session会更新它。
2) 上述三个要素会存在服务器上,服务器需要验证客户端Cookie里的这三个要素。
登录Token是单实例登录,意思就是一个用户只能有一个登录实例。登录序列是用来做盗用行为检测的。
如果用户的Cookie被盗后,盗用者使用这个Cookie访问网站时,我们的系统是以为是合法用户,然后更新“登录Token”。而真正的用户 回来访问时,系统发现只有“用户名”和“登录序列”相同,但是“登录Token” 不对,这样的话,系统就知道,这个用户可能出现了被盗用的情况。于是,系统可以清除并更改登录序列 和 登录Token,这样就可以令所有的Cookie失效,并要求用户输入口令。并给警告用户系统安全。
3. 不要让Cookie有权限访问所有的操作
参考新浪微博的XSS攻击,即使Cookie有权限访问登录之后的所有操作。下面的这些功能一定要用户输入口令:
 修改口令。
 修改电子邮件。
 用户的隐私信息。
 涉及金钱的用户消费功能。
(三) 找回口令功能
找回口令的功能一定要提供,目前常用的找回口令功能大致有以下几种:
1) 安全问答。
事实证明,这个环节很烦人,而且用户并不能很好的设置安全问答。什么,我的生日啊,我母亲的生日,等等。因为今天的互联网和以前不一样了,因为SNS,今天的互联比以前更真实了,在facebook,开心,人人网,LinkedIn查到很多的真实的信息。
2) 重置用户的密码。
这有可能让用户的密码遭到恶意攻击
3) 安全一点的做法——通过邮件自行重置。
当用户申请找回口令功能的时候,系统生成一个MD5唯一的随机字串(可通过UID+IP+timestamp+随机数),放在数据库中,然后设置 上时限(比如1小时内),给用户发一个邮件,这个连接中包含那个MD5的字串的链接,用户通过点击那个链接来自己重新设置新的口令。
4) 更安全一点的做法——多重认证。
比如:通过手机+邮件的方式让用户输入验证码,还可以使用数字证书、动态口令等方式。是否使用多重认证,主要取决于Web应用系统的重要性程度。
(四) 防御暴力破解
1) 使用验证码。
验证码是后台随机产生的一个短暂的验证码,这个验证码一般是一个计算机很难识别的图片。这样就可以防止以程序的方式来尝试用户的口令。
事实证明,这是最简单也最有效的方式。当然,总是让用户输入那些肉眼都看不清的验证码的用户体验不好,所以,可以折中一下。比如Google,当发现一个IP地址发出大量的搜索后,其会要求你输入验证码。
2) 用户口令失败次数
设置口令失败的上限,如果失败过多,则把帐号锁了,需要用户以找回口令的方式来重新激活帐号。
但是,这个功能可能会被恶意人使用,造成用户账户不能使用(这是一种变相的拒绝服务攻击)。更好的方法是,结合IP地址做验证,同时增加尝试破解 的时间成本。如,两次口令尝试的间隔是5秒钟。三次以上错误,帐号被临时锁上30秒,5次以上帐号被锁1分钟,10次以上错误帐号被锁4小时等等。如果发 现来自同一IP地址的错误次数太多,正确的做法是禁止这个用户在这个IP地址登录,而不是单纯的禁止用户登录。

 

注:转载于http://qq405371160.iteye.com/blog/1743237

转载于:https://www.cnblogs.com/wcyBlog/p/3820353.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可耗竭且不可回收的资源

第四章可耗竭且不可回收的资源能量是人类最关键的资源,没有它,生命将会终结。第一节天然气:价格控制第二节卡特尔问题• 卡特尔卡特尔是资本主义国家中的垄断组织形式之一,由生产同类产品的企业联合组成。卡特尔成员企业一方面为了…

stylus之其余参数(Rest Params)

其余参数(Rest Params) 其余参数: Stylus支持name…形式的其余参数。这些参数可以消化传递给混写或函数的参数们。这在处理浏览器私有属性,如-moz或-webkit的时候很管用 下面这个例子中,所有的参数们(1px, 2px, …)都被一个args参数给简单…

Taro+react开发(28)本地用require线上不必

img_hongchen: require("../../assets/images/companyTitle/system_video_cover.png"),

FineUI表格模板列Undefined问题

一般是配置文件未添加ClientID"AutoID"引起转载于:https://www.cnblogs.com/fuqiang88/p/3822567.html

fork()使用(一)

第一贴:cu上关于fork()函数的精辟分析 声明:在别人的博客上看到这篇文章,真的很精辟,把问题一下子讲清楚了。所以,特意转贴在此,向各位高人致敬,也向原贴主致谢!本人不改变原贴的风貌…

stylus之注释(Comments)

注释(Comments) 注释 Stylus支持三种注释,单行注释,多行注释,以及多行缓冲注释 单行注释: 跟JavaScript一样,双斜杠,CSS中不输出 多行注释: 多行注释看起来有点像CSS的常规注释。然而&a…

吃的文化

主料;发好活海参1条,120克,辅料龙口粉丝10克,蟹黄2克 ,五花肉丁10克 西兰花1朵土鸡蛋1个浓汤200克 ,海参过水,五花肉煸锅加蚝油2克,金标老抽1克,加浓汤200克 盐味精各一克…

进程初学(二)

首先&#xff0c;来看一下下面的源程序吧&#xff1a; #include <stdio.h>#include <unistd.h>int main(){pid_t pid;printf("Now only one process\n");printf("Calling fork...\n");pid fork();if(!pid){ // 这里是子进程执行的任务printf…

stylus之条件(Conditionals)

条件(Conditionals) 条件&#xff1a; 条件提供了语言的流控制&#xff0c;否则就是纯粹的静态语言。提供的条件有导入、混入、函数以及更多。下面的例子纯粹示例&#xff0c;并不是使用建议 if / else if / else 这没什么好说的&#xff0c;跟一般的语言一致&#xff0c;i…

Taro+react开发(30)引入静态资源地址

<Image mode"widthFix" src{require("./bussness/sysw.jpg")} />

发短信接口获取验证码

接口合作公司 &#xff1a;http://sms.inolink.com/LoginFront.aspx 从这里获取id <?php function execPostRequest($url,$fields){if(empty($url)){ return false;}//$fields_string http_build_query($post_array);foreach($fields as $key>$value) { $fields_strin…

有感于《你赔了我赚了》

昨晚&#xff0c;看了一部电影名叫《你赔了我赚了》。我心情久久不能平静下来&#xff0c;当晚碾转反侧不断地思考着、、、、、这部电影以其极为夸张的手法和特写镜头&#xff0c;聚焦在社会上虚假广告的拍摄&#xff0c;深刻地揭示了当今社会存在的丑陋现象。也正因为这个关系…

Express中use挂载中间件的方法

1.app.use([path,], function [, function…]) 挂载中间件方法到路径上。如果路径未指定&#xff0c;那么默认为”/” 2.一个路由将匹配任何路径如果这个路径以这个路由设置路径后紧跟着”/”。比如&#xff1a;app.use(‘/apple’, …)将匹配”/apple”&#xff0c;”/apple/…

对Ubuntu20.04.2 mate 桌面 Brisk menu 组件的配置

Brisk Menu 让菜单在 mate 桌面上灵活布局&#xff0c; 那个会跳动的精灵还是挺不错的&#xff0c;适当处理后就得到了下面干净利索的桌面。 Ubuntu 安装时&#xff0c;在控制中心留有 plank reference 设置功能&#xff0c;让屏幕中底部的这些组件在不同位置摆放。当进行配置时…

【WCF--初入江湖】11 安全

11 安全 前言 【1】传输安全传输安全模式传输安全与绑定协议【2】身份验证身份验证分类证书示例&#xff1a;传输安全匿名客户端证书的使用1. 传输安全 保证信息在传输过程中的安全.传输安全是身份验证和授权的前提。传输安全模式&#xff1a; None&#xff1a;关闭了传输安全的…

第三代智能建站系统

智能建站又称第三代网站建设系统&#xff0c;模板建站&#xff0c;自助建站。南京空间智能建站网采用当前最先进的智能建站专利技术&#xff0c;功能强大&#xff0c;操作简单&#xff0c;实现了真正的会打字就会建网站的梦想。南京空间智能建站网采用的技术基于Internet的Web技…

linux 下清空回收站命令

我的系统是Fedora12&#xff0c;要想清空回收站的内容&#xff0c;首先就要知道回收站的位置。 我是以root登录系统的&#xff0c;回收站的默认位置是$HOME/.local/share/Trash/files 所以&#xff0c;清空回收站的命令就出来了&#xff1a; [root~ #7]#ls /root/.local/sha…

express中res.json方法

res.json([body]) 发送一个json的响应 这个方法和将一个对象或者一个数组作为参数传递给res.send()方法的效果相同 你可以使用这个方法来转换其他的值到json&#xff0c;例如null&#xff0c;undefined。(虽然这些都是技术上无效的JSON)