我正在建立一个网站,允许用户创建帐户并访问网站的内容。我不希望用户每次访问网站时都登录,因此我打算将用户名和密码存储在cookie中 - 但是,我听说这是不好的做法,即使密码是在饼干。
我应该遵循哪些“最佳做法”来安全记住访问我网站之间的用户凭据?
答案 0 :(得分:3)
不要那样做。在打开密码时抛出密码。
最安全的方法:
将用户名存储在数据库中,在同一行中随机生成的salt值,在同一行中包含密码的哈希校验和,包括salt。将另一个表用于引用具有用户凭据的表的会话。当用户登录您希望会话过期的日期时(例如,在15天之后),您可以在会话表中插入。将会话ID存储在cookie中。
下次用户登录时,您将获得密码,为用户添加salt,对其进行比较,并将其与您拥有的哈希值进行比较。如果它们匹配,则通过在会话表中插入一行并在cookie中发送会话ID来打开会话。您可以通过此cookie检查用户是否已登录以及该用户是谁。
编辑:
此方法是大多数网站上最常用的方法。它在安全和实用之间取得了良好的平衡。
您不是简单地为会话ID使用自动增量值。你通过使用一些难以重复的复杂校验和来实现它。例如,连接用户名,时间戳,盐,另一个随机盐,并从中生成一个md5或sha校验和。
为了实现涉及网站/服务中的用户凭证的功能,大多数是与客户端和服务器之间的凭证相关的一些数据交换。这会将数据暴露给中间attacs等人。此外,cookie存储在用户硬盘中。没有方法可以100%安全。
如果您想要额外的安全性,可以让您的网站通过https。这可以防止人们在中间攻击中使用人员窃取cookie和密码。
注意:
在混合中使用IP地址并不是一个好主意。大多数情况下,多个客户端将通过NAT等来自相同的IP地址。
答案 1 :(得分:2)
您不需要存储密码,只需存储应用程序可以解释为的用户标识符。
您需要注意的事项:
处理这些问题的一个可能的解决方案是为每个用户在下次使用应用程序时更改创建一次性密钥。
您可能永远无法完全安全地记住用户,因此只有在没有涉及敏感数据的情况下才能使用此功能。
答案 2 :(得分:1)
任何形式的密码都不应存储在Cookie中。饼干很容易被盗。
有些浏览器已经支持保存密码。为什么不让用户使用它呢?
答案 3 :(得分:0)
在cookie中存储用户名的哈希可以提供这种“记住我”的功能。
但是对于系统的敏感区域,您需要知道用户是否使用缓存凭据进入系统,以便在您让它们造成任何真正的损害之前提供用户名/密码提示。这可以作为基于会话的标志保存。