`
qq405371160
  • 浏览: 32436 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 
阅读更多
如何设计安全的用户登录功能


用户登录功能是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地址登录,而不是单纯的禁止用户登录。

分享到:
评论

相关推荐

    java基于springBoot和jwt实现用户登录功能

    Java基于Spring Boot和JWT实现用户登录功能 知识点1:Spring Boot框架 Spring Boot是一个基于Java的框架,旨在简化Spring应用程序的创建和开发过程。它提供了一个快速、灵活、可靠的方式来构建生产级别的应用程序...

    LABVIEW用户登陆系统_LABVIEW用户登录界面设置_

    在LABVIEW中构建用户登录系统是一项常见的任务,尤其对于大学生本科毕业设计而言,它能帮助学生熟悉编程环境,掌握数据管理及用户权限控制的基本概念。本文将深入探讨如何使用LABVIEW来实现用户登录界面设置,并讲解...

    用户管理 labview 登陆界面设计

    在LabVIEW编程环境中,设计一个用户管理及登陆界面是一项关键任务,这涉及到...以上就是LabVIEW中设计用户管理登陆界面所涉及的主要知识点。通过深入理解和实践这些概念,你可以创建出功能完备且安全的用户管理系统。

    统一用户中心详细设计方案.pdf

    这份方案旨在构建一个高效、安全且统一的用户中心系统,以提供单点登录(Single Sign-On, SSO)、会话管理、权限控制及消息服务等功能,从而简化用户在多个业务系统间的操作流程,提高用户体验,并强化整体系统的...

    C#设计的简单的用户登录界面窗体

    在C#编程中,设计一个用户登录界面是创建应用程序的基础步骤之一。这个界面通常作为系统访问的入口点,验证用户的凭据(用户名和密码),确保只有授权用户能够进入。在这个"简单的用户登录界面窗体"中,我们可以学习...

    会员管理系统之用户登陆和会员管理模块的设计与实现

    本项目“会员管理系统之用户登陆和会员管理模块的设计与实现”聚焦于系统的核心功能,包括会员卡密码的加密存储、用户登录的身份验证以及会员信息的管理。这里我们将详细探讨这些知识点。 首先,会员卡密码的加密...

    数据库课程设计-前端+后端实现用户登录等一系列操作(源码)

    在这个项目中,我们将讨论如何通过前端和后端技术实现用户登录功能,以及其他相关操作。源码的提供使得我们可以深入研究每个步骤的细节。 首先,前端部分通常包括用户界面的设计和交互逻辑的实现。对于用户登录功能...

    一个较完整的Qt用户登录界面设计

    一个较完整的Qt用户登录界面,稍微移植可用,用sqlite数据库存储用户名和密码,具有增加和删除用户的功能,开发环境为ubuntu16.04+Qt5.6.1,win7下程序也编译可用。贡献出来,共同学习,欢迎交流。

    员工管理系统的设计方案,包括功能要求、使用的技术栈、数据库设计、用户界面搭建,以及扩展的安全控制等 项目概述 项目名称: 员

    员工管理系统的设计方案,包括功能要求、使用的技术栈、数据库设计、用户界面搭建,以及扩展的安全控制等。 项目概述 项目名称: 员工管理系统 项目目标: 设计并实现一个基于 Java 的员工管理系统,支持员工信息...

    网站后台功能设计与实现

    本章主要围绕登录系统与管理主页设计、系统用户权限管理、商品销售管理、会员管理和促销快讯管理等功能进行深入探讨。 5.1 登录系统和管理主页设计 登录系统是后台的第一道防线,负责验证用户的身份。在"宝宝365...

    常见功能测试用例设计详解

    通过上述测试用例的设计方法,我们可以为A系统的登录功能进行全面的测试,确保其功能稳定、安全可靠。 通过以上内容可以看出,在设计功能测试用例时,我们需要从多个角度出发,考虑各种边界条件、异常情况以及用户...

    360网神&奇安信虚拟化安全V7.0用户手册.docx

    本手册是360网神&奇安信虚拟化安全V7.0的用户手册,旨在帮助用户了解虚拟化安全管理系统的功能和使用方法。该手册涵盖了产品概述、设计理念、产品架构、功能使用说明、登录、界面说明、概览、资产概况、服务器性能...

    统一用户管理系统设计

    综上所述,统一用户管理系统的设计旨在解决银行内部用户管理存在的问题,通过实现单点登录等功能,提高系统的易用性和安全性,同时也减轻了运维人员的压力。通过自主开发的方式实现这一系统,不仅降低了成本,还增强...

    delphi unigui登录界面记住用户密码

    在Delphi Unigui开发环境...综上所述,实现“delphi unigui登录界面记住用户密码”涉及多个方面,包括UI设计、数据存储、用户验证、权限管理以及安全性考虑。在实际开发中,需要根据具体需求和项目规范进行调整和优化。

    用户界面设计

    在本话题中,我们将深入探讨用户界面设计的各个方面,特别是登录功能的实现及注册过程的设计。 首先,我们要理解用户界面设计的核心理念。这包括了对用户需求的理解,通过研究目标用户的使用习惯和行为模式来制定...

    操作系统之文件系统设计一个n 个用户的文件系统,每次用户可保存m 个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施。至少要有create,delete,open,close,read,write等命令

    在这个特定的实验任务中,你需要设计一个支持n个用户、每个用户可以保存m个文件的文件系统。为了确保数据安全,文件系统需要具备基本的文件操作功能,如创建(create)、删除(delete)、打开(open)、关闭(close...

    网络安全检测系统的设计与实现.pdf

    网络安全检测系统的设计目标是对网络中的用户计算机和网络访问行为进行审计,检测系统具备自动响应、自动分析功能。自动响应是指当系统发现有用户非法访问网络资源,系统将自动阻止,向管理员发出警示信息,并记录...

    3-13 实现用户登陆功能(持久层&业务层) - EMOS小程序1

    这种设计可以确保用户登录的安全性和可靠性。 五、扩展 在本文中,我们只实现了用户登录功能,但是还可以扩展到其他方面,例如: * 实现用户注册功能 * 实现用户信息修改功能 * 实现用户登出功能 * 实现用户权限...

    PyQt 编写的用户登录,注册页面源码

    客服端登录页面实现功能: 1、检查是否存在已注册用户数据,如无用户数据,提醒注册。 2、登录时检查用户ID及密码,提示错误信息:用户不存在,密码错误。 3、提供记住用户名,用户密码,用户自动登录功能,并可以在...

Global site tag (gtag.js) - Google Analytics