网站登录持久化Cookie方案

时间:2023-07-01 01:44:17 


前提

1. Cookie 是脆弱的。cookie 容易被窃取和受到垮站脚本的攻击,我们必须接受 cookie 是不安全的。
2. 持久化登录 cookies 使得它们能通过网站的认证。这跟使用用户名和密码登录是相同的。
3. 能从登录 cookie 里恢复密码的设计比不能恢复更危险。
4. 把持久化 cookie 跟 ip 绑定起来大多数时候使它们并不持久。
5. 用户可能希望同时把 cookie 持久保存在多个浏览器,多台机器上。

方案

首先这个 cookie 由用户名、分隔符和一个很大的随机数(128 位是比较理想的可以接受的长度)组成。服务器上有一张表保存有这个随机数和用户名的关系,用来验证 cookie 是否合法。如果 cookie 提供的随机数和用户名跟表上存的能对应上且未过期,那么就可以接受用户的登录。 表结构:


id username token  expire_time
1 foo 598433213…..8766688 2012-09-21 00:00:00
2 bar 435435997…..4354564 2012-09-22 11:00:00

某些时候,一个用户名可能对应多个随机数。另外,虽然不大可能,但即使有两个用户名对应同一个随机数也没什么关系。

一个持久化 cookie 被认证后,这个用来登录的随机数就失效了,并且需要分配一个新的 cookie (生成一个新的随机数, 并更新数据库里的记录)给用户。然后用标准的 session 管理机制来处理 session 的生命周期,而那个新设置的 cookie 直到这次 session 结束都不会再被检查。

服务器不需要特意防止一个以前用过的随机数被重新使用,这个几率非常小,即使发生了也没有人会知道可以利用它。

当用户通过退出功能退出后,他们当前 cookie 里的随机数也就失效了。用户也应该可以选择清除所有被系统记录的持久化登录。

数据库不定期的清理那些过期的记录(类似 session 的 gc 机制)。

下面这些功能不能允许通过 cookie 登录的用户使用:


* 修改密码
* 修改用户邮箱(特别是如果系统的密码找回机制是基于邮箱的)
* 任何用户的敏感信息
* 任何需要支付的功能

最后

如果用户的登录 cookie 受到了攻击,攻击者就能以这个用户的身份来使用网站的功能。这是使用 cookie 无法避免的!尽管如此,攻击者应该不能:


* 接触用户的敏感信息
* 花用户的钱
* 重置用户密码
* 以用户的名义阻止用户接收网站的通知
* 共享偷到的 cookie 给其他人

标签:持久化Cookie
0
投稿

猜你喜欢

  • python实现中文分词FMM算法实例

    2022-07-31 18:40:55
  • 自定义PyCharm快捷键的设置方式

    2023-11-20 08:28:08
  • PyQt5 matplotlib画图不刷新的解决方案

    2021-06-14 14:43:39
  • 利用pandas按日期做分组运算的操作

    2021-03-06 09:16:17
  • Python pip 常用命令汇总

    2023-06-10 06:11:38
  • python3结合openpyxl库实现excel操作的实例代码

    2021-02-24 05:06:59
  • javascript对select标签的控制(option选项/select)

    2024-04-19 10:15:54
  • 在Windows下安装配置CPU版的PyTorch的方法

    2023-07-18 15:04:17
  • PHP基础用法讲解及phpinfo();演示

    2023-05-29 08:34:29
  • go redis实现滑动窗口限流的方式(redis版)

    2024-02-02 18:04:27
  • WEB2.0网页制作标准教程(4)如何调用css样式表

    2007-11-13 13:26:00
  • 教您去掉ie网页加载进度条的方法

    2024-05-02 16:20:11
  • 浅谈javascript中的DOM方法

    2024-04-29 13:44:12
  • 新手必备之MySQL msi版本下载安装图文详细教程

    2024-01-26 04:04:05
  • python变量赋值方法(可变与不可变)

    2021-02-14 08:51:55
  • Python实现一个发送程序和接收程序

    2023-06-18 09:04:38
  • Mysql按条件计数多种实现方法详解

    2024-01-18 09:43:35
  • vc6编写python扩展的方法分享

    2022-05-12 16:39:30
  • js,jquery滚动/跳转页面到指定位置的实现思路

    2024-04-10 16:19:54
  • 对django layer弹窗组件的使用详解

    2021-09-08 00:09:38
  • asp之家 网络编程 m.aspxhome.com