代码之家  ›  专栏  ›  技术社区  ›  mmr

如何管理用户名/密码会话信息?

  •  1
  • mmr  · 技术社区  · 15 年前

    我有一个网站(其基本要点在 this question ,我想有一些方法来存储用户名和用户使用站点时的一些信息(例如,上传和下载数据)。

    现在,如果登录成功,我将返回密码的散列值以及任何相关信息。每当用户尝试某项操作时,其用户名、哈希等必须与数据库中的内容匹配。如果用户注销,则其本地Sinatra会话将刷新所有信息。

    我意识到这是一种非常幼稚的方法。有没有更好的方法来处理用户会话信息?cookies上的wikipedia条目提到使用会话uid而不是其他信息;这种方法的优势是什么?我怀疑这种方法也很容易受到其他攻击,但是由于我验证了所有已经做过的事情,所以我不确定我要对哪些攻击敞开心扉。

    另外,如果/当我实现SSL时,这些事务是否会被“自动”加密,或者如果需要,我是否需要做其他事情来确保字符串受到保护?

    2 回复  |  直到 15 年前
        1
  •  4
  •   John Gietzen    15 年前

    这实际上是一个非常复杂的问题。举个例子,您遇到了帐户锁定的问题:如果您基于失败的尝试进行锁定,那么攻击者处理您的网站有多容易?

    我将列出一些让您开始的最佳实践:

    1. 存储密码 加盐和土豆泥 以及用户名和用户名。(您还应该将盐存储在哈希旁边。)

    2. 不允许的 频繁的错误密码尝试。(每几秒钟一次以上)。

    3. 如果任何给定用户或任何给定IP地址的尝试失败(一分钟超过3次) 需要某种形式的人类验证 就像一个验证码。这样可以防止DoS攻击。

    4. 如果实现自动登录系统, 使用令牌身份验证 系统。

    5. 对于令牌认证系统,使用安全的随机数生成器,将普通令牌发送给用户,但是 盐和土豆泥 在数据库中。

    6. 如果可能,请使用TLS/SSL 但一旦数据脱离网络,就不要依赖于它们的安全性。

        2
  •  0
  •   Dr. Rajesh Rolen    15 年前

    如果您的网站是用ASP.NET构建的,那么您可以使用DOT NET证券。这真的很好。您还可以在其中使用Principle类来提高安全性。