关于登录cookie的建议

时间:2015-04-24 09:21:03

标签: javascript cookies

我有一个客户可以登录的网站。他们的用户名,加密密码和一些其他信息存储在服务器上的SQL数据库中。我正在设置一个cookie来重新唤醒用户几天。

我到处读到出于安全原因我不应该在cookie中保存用户名和密码。我不得不说我不确定为什么。 cookie存储在客户端对吗?因此,他能够看到他的用户名和密码,那是什么不安全的?

无论如何,我很确定有充分的理由而且只是我看不到它,我读到解决方案就是这样做:

  1. 哈希并加密密码
  2. 将登录信息存储到服务器上的文件
  3. 为文件指定一个唯一名称
  4. 将名称存储到Cookie
  5. 每次收到包含正确文件名的cookie时,请查找该文件并检索登录信息。
  6. 所以我应该生成一个唯一的ID来存储在我的数据库中并将其与用户相关联。

    我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

您不需要存储用户名和密码。您可以使用过期日期存储会话密钥(保存在数据库中)。

如果您在本地存储用户名和密码,如果用户在家,这不是一个大问题,但如果用户不在家该怎么办?如果用户不在自己的计算机上,该怎么办?

甚至加密,一些"坏人"可以得到它。

答案 1 :(得分:1)

问题是用户可以更改cookie值。所以他可以将用户名设置为别人的名字。

不是将用户名放在cookie中,而是将唯一的文件名放在cookie中。这实质上就是PHP会话的工作方式 - 他们将所有会话数据放在一个文件中,并使用文件名设置一个PHPSESSID cookie。

答案 2 :(得分:1)

  

不应该在cookie中保存用户名和密码...不确定为什么

因为用户可能不是对客户的独占控制 - 例如公共接入终端,甚至是个人计算机,这扩大了恶意软件的攻击面。与会话标识符相比,实体的生命周期越长,攻击面也越大。

如果没有正确加密和重新验证,那么用户可以轻松地将数据更改为其他人的数据。

关于其余的......

  

为文件指定一个唯一的名称

文件?什么文件?您正在尝试实施代理身份验证令牌。具体方式取决于编程语言和要实现的策略。系统是否允许用户在多台计算机上存储令牌(这意味着多个并发值)?它是否应该与最初分配给它的机器紧密相关(在这种情况下,如何建立身份?使用IP地址或用户代理有限制)?

通常,您应该在服务器上存储令牌和帐户之间的映射(以及其他元数据,如机器标识和到期)。