我有一个新手问题-
人们常说,您不应该将明文密码存储 在客户端 cookie 中。(我在想象一个网络浏览器 cookie,但我认为这通常适用。)但在简单的网络应用程序中,我们经常将纯文本会话 ID 存储在 cookie 中。
详细地说,我们经常使用这种模型来保护网站:
- 用户在客户端机器上输入用户名和密码。这些通过安全 (HTTPS) 连接发送到服务器。
- 服务器对密码进行哈希处理并针对数据库进行验证。假设密码正确,服务器会生成一个会话 ID,并将其与响应正文一起返回给客户端机器。
- 客户端将明文会话 ID 存储在 cookie 中。每次客户端再次调用服务器时,会话 ID 都会通过安全连接发送回服务器。
- 在 x 分钟不活动后,会话过期并且会话 ID 不再被视为对该用户有效。
但是我们强烈建议不要使用这个模型:
- 用户在客户端机器上输入用户名和密码。这些以纯文本形式存储在客户端 cookie 中。然后,它们通过安全 (HTTPS) 连接发送到服务器。
- 服务器对密码进行哈希处理并针对数据库进行验证。假设密码正确,服务器返回响应。
- 每次客户端再次调用服务器时,密码都会通过安全连接发送回服务器。
- 在 x 分钟不活动后,cookie 过期并且密码不再保存在客户端计算机上。
为什么第二个模型被认为是不安全的,而第一个模型是安全的?当然,在第二种模型中,一个邪恶的 cookie 阅读器可以从浏览器中窃取密码。但在这两种模型中,邪恶的密钥阅读器都可以从 IO 子系统中窃取密码。这是不使用第二个模型的唯一原因 - 通过阻止 cookie 读取器来稍微减少我们的攻击向量?或者在客户端上存储密码是否存在更大的问题,我没有看到?