记住用户复选框的安全方法

时间:2011-11-23 03:52:56

标签: asp.net-mvc-3 security cookies passwords saltedhash

我有一个登录页面,要求输入用户名和密码。此页面有一个复选框“记住我”。

身份验证是:对于提供的用户名,使用与用户db记录一起存储的salt将提供的密码转换为哈希值,并将哈希值与存储的哈希值进行比较。

当用户勾选该框时,我应该将哪些内容存储在他们的Cookie中,以便他们下次访问时自动登录?

我认为一个好方法是将他们的用户名和密码的哈希值存储在cookie中,并在下次访问时重新验证用户身份。盐将被保存在数据库中。

3 个答案:

答案 0 :(得分:3)

我不会在客户端cookie中存储散列密码。我会在用户和长期会话之间创建另一个抽象。我将首先阅读以下文章,以了解有关挑战的一些想法:

http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/

该文章的关键部分是并非所有登录都应该是相同的。

答案 1 :(得分:2)

这取决于您要维护的安全级别。当我选中“记住我”框时,我只想让它记住我的用户名。我仍然想照常提供我的密码。

在cookie中存储用户名和哈希密码,对我来说似乎是一个坏主意。

答案 2 :(得分:2)

如果您真的想让用户登录,那么您应该在cookie中存储唯一的登录令牌,而不是用户名或散列密码。当您的服务器收到登录令牌时,您可以将其与持久登录用户的数据库进行比较,并查看令牌对应的用户。服务器应存储登录令牌,与该令牌关联的用户名以及到期时间。一旦使用了令牌,它就会失效,因此无法重复使用。

这可以最大限度地减少泄露给客户端的信息,并限制攻击者在设法窃取cookie时恢复合法用户密码的机会(这相对容易)。

我强烈建议您在所有Cookie上设置安全标记,以便它们仅通过安全连接发送,并确保持久登录的超时时间相对较短。此外,进行额外的授权检查是个好主意,例如确保登录令牌与特定的IP地址或浏览器指纹相关联,以帮助防止偶然攻击。这仍然不会严重阻碍一个坚定的攻击者,但可能会劝阻一些脚本小子。

最后,请考虑接受@Craig T&#39的建议,只记住用户名,而不是让用户登录。持久登录非常危险,因此您应该仔细考虑用户从此获得的价值与潜在成本。

擅长将密码正确存储在数据库中!令人惊讶的是有多少人认为他们不需要盐。