这个功能简直就是一个安全隐患,我觉得并不是所有的程序员都知道怎么设计这个事。一般的设计 是——一时用户勾选了这个功能,系统会生成一个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的后来登录用户挤掉之前的登录用户这样的功能。

转载于:https://www.cnblogs.com/liangGe/archive/2012/07/30/2638956.html

“记住密码“功能的正确设计相关推荐

  1. PHP会员登录实现记住密码功能 thinkPHP5

    会员登录实现记住密码功能需要用到cookie 和session,首先我们来简单了解一下cookie 和session 的区别 Cookie Cookie是完全保存在客户端.当客户端禁止cookie时将 ...

  2. AppCan用cookie实现记住密码功能 [APP]

    今天想做个在应用上记住密码的功能.想了一下,先用COOKIE来测试.COOKIE保存在客户端. 关于COOKIE在手机上安不安全的问题,以后再讨论. 其实想过在手机上创建文件保存密码,但是,没有时间, ...

  3. vue 登录页面记住密码功能

    vue+iview/element 一般用来快速搭建后台管理系统,登录页的记住密码功能也是必不可少的. 记住密码快速登录功能(iview ui): 思路:首次登录,记住密码,将密码存储到cookie中 ...

  4. LayUI记住密码功能(已实现)

    文章目录 前言 一.效果与逻辑 二.使用步骤 1.html 2.js 三.总结 四.补充 前言 为了提高客户用户体验,每一个管理系统都有自己的记住密码功能.让客户减少账号与密码的输入,从而提高客户的体 ...

  5. 【html实现记住账号、记住密码功能】

    html实现记住账号.记住密码功能 效果图: 1.页面添加记住账号.记住密码多选框 <div class="remember" style="text-align: ...

  6. vue考试系统后台管理项目-登录、记住密码功能

    考试系统后台管理项目介绍: 技术选型:Vue2.0+Elemenu-ui 项目功能介绍: 账户信息模块:菜单权限.角色权限设置.角色权限分配.账号设置.公司分组 考试管理模块:新增/编辑/删除考试试题 ...

  7. java记住密码 cookie_Java Web网站怎么利用Cookie实现记住密码功能

    在做java web网站开发时,为了避免每次登录都需要输入用户名和密码,我们会使用Cookie技术来实现记住密码功能,在这里小编使用简单的项目案例来教大家具体的实现过程. 前期准备 1.下载好jque ...

  8. PyQt5实现登录界面,包含用户注册,记住密码功能

    本文主要基于PyQt5用的是qt designer,连接MySQL实现登录界面,包含注册功能,记住密码功能,说明这一切都是基于在pycharm上配置好了pyuic和qt designer 目录 1.实 ...

  9. php记住密码怎么写,PHP记住密码功能实现例子

    记住密码功能我们在许多网站登录时都会看到有这个功能了,下面我们来看一篇基于php的记住密码功能的实现方法,具体的例子如下所示. 提供两个内置的方法,可以在项目中直接使用,很方便/** * 记住密码/清 ...

最新文章

  1. 2018年08月19日发烧诸事记
  2. 兼容IE各版本的纯CSS二级下拉菜单
  3. 【bzoj2423】最长公共子序列[HAOI2010](dp)
  4. ibatis mybatis传入List参数
  5. python机械手标定_机械手姿态的获取,ros,臂,当前,位姿
  6. $.type 怎么精确判断对象类型的 --(源码学习2)
  7. 项目管理笔记-第十章 项目沟通管理
  8. Pycharm工具下的数据可视化(图形绘制)
  9. 性能优化 ---启动优化
  10. 外网访问 虚拟机下的web服务器 设置主机端口与虚拟机ip和端口的映射
  11. Nvidia驱动负优化与GTX1070的测试
  12. 华为交换机初始化_我想问华为 s5700交换机 1。请问怎么恢复出厂设置? 2。如果没有密码又怎么恢复出厂设置? 谢谢了...
  13. [NLP比赛推荐]商品标题实体识别
  14. 使用js转换数据库时间类型
  15. EOS系列六:wallet钱包、key公私钥对、account帐号的关系
  16. MySQL占用内存资源过多的解决方法
  17. m基于MATLAB的FM调制收音机仿真实现
  18. 用友优普超客营销助恩普特打造营销管理利器
  19. React-缩略图组件使用
  20. irst-missing-positive

热门文章

  1. python 时间字符串和时间戳之间的转换
  2. 学习js权威指南第五站 ---- 数组
  3. Flask web开发之路四
  4. iOS 中client和server的 Web Service 网络通信 (1)
  5. 转:测试部工作不受重视怎么办?
  6. BeautifulSoup学习笔记
  7. java简单线程池实例代码
  8. [原]Python命令
  9. JAVA多线程之Runnable和Thread比较
  10. 2021年的“金九银十”你准备好了吗?,腾讯、字节、百度、阿里、快手等一线互联网公司面试真题分享