我有一个网站(其基本要点描述在this question),我想有一些方法可以在用户使用网站(即上传和下载数据)时一直存储用户名和用户信息。我应该如何管理用户名/密码会话信息?
现在,如果登录成功,我将返回密码的散列以及任何相关信息。任何时候用户尝试一些东西,他们的用户名,散列等都必须与数据库中的内容相匹配。如果用户注销,他们的本地Sinatra会话将刷新所有信息。
我意识到这是一种非常幼稚的做法。有没有更好的方法来处理用户会话信息?关于cookie的维基百科条目提到使用会话uid而不是其他信息;这种方法的优点是什么?我怀疑这种方法也容易受到其他攻击的影响,但是由于我对所做的所有事情都进行了验证,所以我不确定自己打开的是什么样的攻击。另外,如果/当我执行ssl时,这些事务是否会'自动'加密,还是我需要做其他事情来确保字符串受到保护,如果它们需要的话?
什么是一个好的起始盐值?例如,我应该让我的数据库从当前系统时间生成一个随机数,然后密码密码哈希值,然后将其作为会话哈希值返回?下次用户登录时,盐是不同的,所以哈希是不同的,但它是持久的特定登录? – mmr 2010-02-02 04:14:34
使用安全的随机数生成器,如.NET中的'RNGCryptoServiceProvider'。您可以安全地将salt存储在数据库中,其中alnong位于known-hash。 – 2010-02-02 04:16:21