我有一个网站(其基本要点在this question中描述),我希望能有一些方法来存储用户名和用户在使用网站时一致的一些信息(即上传并下载数据)。
现在,如果登录成功,我将返回密码的哈希值以及任何相关信息。每当用户尝试某事时,他们的用户名,哈希等必须与数据库中的内容相匹配。如果用户注销,他们的本地Sinatra会话将刷新所有信息。
我意识到这是一种非常天真的方法。有没有更好的方法来处理用户会话信息?关于cookie的维基百科条目提到使用会话uid而不是其他信息;这种方法的优点是什么?我怀疑这种方法也容易受到其他攻击,但是由于我验证了所做的所有事情,我不确定我将自己开放的攻击。</ p>
此外,如果/当我实施ssl时,这些交易是否会“自动”加密,或者我是否需要做其他事情以确保字符串受到保护(如果需要的话)?
答案 0 :(得分:4)
这实际上是一个非常复杂的问题。只是为了说明,你有帐户锁定的问题:如果你根据失败的尝试锁定,攻击者对你的网站DOS有多容易?
我将列出一些最佳实践来帮助您入门:
在用户名和UserId旁边存储密码 Salted and Hashed 。 (您还应该将哈希值存储在哈希旁边。)
禁止频繁尝试密码错误。 (比每隔几秒更频繁一次)。
如果尝试对任何给定用户或任何给定的IP地址(每分钟超过3次)失败,需要某种形式的人工验证,如CAPTCHA。这样可以防止总DOS攻击。
如果实施自动登录系统,使用令牌身份验证系统。
对于令牌认证系统,使用安全随机数生成器,将普通令牌发送给用户,但在数据库中对令牌进行加盐和散列。
尽可能使用TLS / SSL ,但一旦数据处于线下状态,就不要依赖其安全性。
答案 1 :(得分:0)
如果您的网站是在asp.net中构建的,那么您可以使用点网证券..这真的非常好。并且您还可以使用其中的原则类来使其更安全..