`
liuguofeng
  • 浏览: 450521 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

记住密码"功能的正确设计

    博客分类:
  • Java
 
阅读更多

这个功能简直就是一个安全隐患,我觉得并不是所有的程序员都知道怎么设计这个事。一般的设计 是——一时用户勾选了这个功能,系统会生成一个cookie,cookie包括用户名和一个固定的散列值,这个固定的散列值一直使用。这样,你就可以在所有的设备和客户上都可以登录,而且可以有多个用户同时登录。这个并不是很安全。下面是一些更为安全的方法供你参考:

 

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

用户名:明文存放。
登录序列:一个被MD5散列过的随机数,仅当强制用户输入口令时更新(如:用户修改了口令)
登录token:一个被MD5散列过的随机数,仅一个登录session内有效,新的登录session会更新它

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

3)这样的设计会有什么样的效果,会有下面的效果,

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

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

4)当然,上述这样的设计还是会有一些问题,比如:同一用户的不同设备登录,甚至在同一个设备上使用不同的浏览器保登录。一个设备会让另一个设备的登录token登录序列失效,从而让其它设备和浏览器需要重新登录,并会造成cookie被盗用的假象。所以,你在服务器服还需要考虑- IP 地址

a) 如果以口令方式登录,我们无需更新服务器的“登录序列”和 “登录token”(但需要更新cookie)。因为我们认为口令只有真正的用户知道。

b) 如果 IP相同 ,那么,我们无需更新服务器的“登录序列”和 “登录token”(但需要更新cookie)。因为我们认为是同一用户有同一IP(当然,同一个局域网里也有同一IP,但我们认为这个局域网是用户可以控制的。网吧内并不推荐使用这一功能)。

c) 如果 (IP不同 && 没有用口令登录),那么,“登录token” 就会在多个IP间发生变化(登录token在两个或多个ip间被来来回回的变换),当在一定时间内达到一定次数后,系统才会真正觉得被盗用的可能性很高,此时系统在后台清除“登录序列”和“登录token“,让Cookie失效,强制用户输入口令(或是要求用户更改口令),以保证多台设备上的cookie一致。

我觉得这是一种不错的方案,cookies被盗的假象甚至可以“弄巧成拙”地实现——QQ的后来登录用户挤掉之前的登录用户这样的功能。

本文转载自:http://coolshell.cn/articles/5353.html(你会做Web上的用户登录功能吗)
分享到:
评论

相关推荐

    登录界面记住密码功能

    在Android应用开发中,"登录界面记住密码功能"是一个常见的用户友好特性,它允许用户在登录时选择保存他们的账户凭证,以便在未来的登录过程中自动填充,从而提高用户体验。这一功能的实现涉及到多个技术层面,包括...

    C#实现记住密码

    在C#编程中,"记住密码"功能是一个常见的用户交互特性,主要目的是为了方便用户在下次登录时无需再次输入他们的密码。实现这个功能涉及到几个关键点,包括数据存储、安全性和用户界面设计。下面我们将详细探讨这些...

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

    记住密码功能必须遵循最佳安全实践,比如只在安全连接下存储,定期更新加密算法,避免明文存储,以及提供用户清除记住密码的选项。 综上所述,实现“delphi unigui登录界面记住用户密码”涉及多个方面,包括UI设计...

    登陆界面记住密码

    首先,我们要理解记住密码功能的基本原理。通常,当用户勾选"记住密码"选项时,应用会将用户名和加密后的密码存储在设备的安全存储区域,如SharedPreferences或者KeyStore。SharedPreferences是一个轻量级的持久化...

    Android 登录界面记住密码功能源码.zip源码资源下载

    在Android应用开发中,"记住...总的来说,这个源码资源提供了实现Android登录界面记住密码功能的完整流程,涵盖了数据存储、UI设计、安全策略和事件处理等多个方面,对于Android开发者来说是一个很好的学习和参考实例。

    安卓Android源码——登录界面记住密码功能源码.zip

    2. **XML布局文件**:在`Android 登录界面记住密码功能源码`中,登录界面的布局文件(如`activity_login.xml`)会包含两个EditText(一个用于输入用户名,另一个用于输入密码)以及一个CheckBox用于勾选“记住密码”...

    Android 登录界面记住密码功能源码.rar

    - 在Android Studio中导入源码,使用模拟器或真实设备运行应用,测试记住密码功能是否正常工作。确保在各种场景下,如首次登录、再次打开应用、清除数据后,功能表现正确。 总结,这个压缩包提供的源码实例是关于...

    电子密码锁详细设计文档

    这些工具可以帮助设计者验证设计的功能正确性,并将其转化为可编程逻辑器件(如FPGA或CPLD)上的配置。 《基于VHDL的数字密码锁的设计与实现》和《基于VHDL的智能密码锁的设计与实现》这两份文档可能会探讨更复杂的...

    密码保护功能实现

    同时,为了提高用户体验,可以加入自动保存和记住密码的功能,但这些功能应遵循最佳安全实践,如使用Keychain存储敏感信息。 7. **测试与优化** 在实现以上步骤后,进行多轮测试,确保在不同场景下密码保护功能都...

    Android程序研发源码Android 登录界面记住密码功能源码.zip

    在Android应用开发中,登录界面是用户接触应用的第一步,其中的“记住密码”功能是一项常见且重要的用户体验设计。这个功能允许用户选择保存他们的账户信息,以便下次打开应用时自动填充,省去了反复输入的麻烦。...

    防止浏览器记住用户名及密码的简单实用方法

    这样,浏览器在加载页面时无法识别它是密码框,从而不会尝试记住密码。例如: ```html ``` 2. **初始化时清空密码框**: 可以在页面加载时通过JavaScript将密码框的值设为空。这有助于确保即使浏览器已经记住...

    安卓登录注册相关-Android条件判断用户名和密码登录跳转主页面记住密码自动登录.zip

    在登录功能中,可以用来持久化用户的登录状态和密码,实现记住密码和自动登录功能。 需要注意的是,由于压缩包中的代码可能需要自行调整才能运行,开发者需要具备一定的Android编程基础,理解并调试代码。对于初学...

    登录页显示密码

    这是另一种为了提高用户体验而设计的功能,它允许用户在成功登录后选择是否记住密码,以便下次访问时自动填充。这通常通过存储用户凭据(如用户名和哈希后的密码)在本地浏览器中实现,但需要注意的是,这种便利性...

    VC++实现简单的用户登录系统,包括修改密码的功能。

    在实现过程中,你可能会遇到的问题包括:如何正确处理用户输入、如何有效地连接和操作数据库、如何确保密码的安全性以及如何优化界面交互。对于初学者,了解并掌握这些概念是至关重要的。 虽然提供的资源可能不完整...

    基于单片机电子密码锁设计作业.pdf

    该设计使用单片机作为主要器件,具有高安全性、低成本、低功耗、易操作、记住密码即可开锁等优点。 在设计中,AT89S51单片机是主要器件,它具有高性能、低功耗、低成本等特点。LCD1602显示屏用于显示密码正确或错误...

    php实现记住用户名和密码

    在PHP编程中,实现“记住用户名和密码”的功能通常涉及到几个关键的技术:MySQL数据库存储、Cookie和Session管理,以及HTML和CSS的交互设计。以下是对这些知识点的详细说明: 1. **MySQL数据库存储**: 当用户成功...

    Maven+SSM+Shiro框架整合完整实现,实现某权限用户登录,记住密码等功能。

    此外,Shiro还提供了记住密码的功能,通过Cookie实现用户的持久化登录,提高用户体验。 项目文件"shiro-test"可能包含的是Shiro相关的测试代码,用于验证Shiro的安全配置是否正常工作,例如用户登录、权限检查、...

    基于51单片机的电子密码锁的设计课程设计报告.doc

    9. 电子密码锁的发展趋势:电子密码锁代替传统机械式密码锁是必然趋势,具有安全性高、成本低、功耗低、易操作、记住密码即可开锁等优点。 10. 系统设计总图:是本设计的总体设计方案,包括硬件组成和软件设计等...

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

    ### 常见功能测试用例设计详解 #### 功能测试概述 功能测试是一种软件测试类型,主要关注软件的功能性方面,确保每个功能模块按照需求规格说明书的要求正确工作。功能测试通常涉及创建详尽的测试用例来覆盖所有...

Global site tag (gtag.js) - Google Analytics