登录系统,安全

时间:2011-04-15 09:48:56

标签: security hash login

我需要建立一个登录系统,并且基本上不知道它是如何完成的(考虑到安全性)我在互联网上研究它。我现在这样做的方式是这样的:

  • 服务器在数据库表中有登录信息 - 用户名和每个用户的密码哈希值(例如,用SHA224加密)。
  • 当客户端想要进行身份验证时,使用SHA224(客户端)加密密码,并使用用户名发送到服务器以验证数据库中的匹配。
  • 如果用户选中“记住我”选项,则会在服务器上生成一个身份验证密钥,并与客户端的IP一起插入数据库。
  • 身份验证密钥将发送到客户端并存储在Cookie中。
  • 现在,当客户端返回时,来自cookie的身份验证密钥被发送到服务器,服务器在数据库中找到它并检查IP是否也匹配。如果是,则对用户进行身份验证,并生成新的身份验证密钥并将其发送给用户(并存储在Cookie中)以供下次访问。

我的问题是:

  1. 如何加密密码使这更安全?哈希仍然可以在从客户端到服务器的途中被捕获并且被误用以及它是否是纯文本。我知道这是一个基本问题,但我无法找到答案。
  2. 这个安全系统足够安全吗? (或者更好 - 我说得对吗?)

3 个答案:

答案 0 :(得分:2)

我想补充一些要点:

  • 密码的散列在客户端上完成。你不能可靠地做到这一点。计算哈希值的必要技术(在您的情况下为JavaScript)可能不可用,您不能相信结果。如果有人可以检索数据库中密码的哈希值,他可以在不知道实际密码的情况下登录。

  • 确保使用SSL或其他安全传输将给定密码从客户端传输到服务器。毕竟SSL是一个好主意。

  • 您不应使用单个哈希算法将密码存储在数据库中。看看HMAC。那要好得多。另外阅读加密中的

答案 1 :(得分:2)

为什么散列密码会使系统更安全

哈希不等于加密。加密数据可以解密回纯文本。散列数据无法解密 通过散列用户的密码,没有人可以看到使用了什么密码。因此,如果您的数据被盗,黑客就无法对哈希进行解密。对于系统管理员来说也是如此,他/她无法“查找”密码。这可以是共享托管环境中的常见方案。

存储密码

  

确保密码存储方案安全的最简单方法是使用标准库

     

因为安全性往往要复杂得多,并且比大多数程序员单独解决的问题更加隐形,所以使用标准库几乎总是最简单,最安全(如果不是唯一的)可用选项。

     

好消息是你不需要担心细节,这些细节是由有经验的人编制的,并且已经被互联网上的许多人评论过。

     

有关密码存储方案的更多信息,请阅读Jeff的博文:You're Probably Storing Passwords Incorrectly

     

无论你做什么,如果你去'我会自己做,谢谢'方法,不再使用MD5 。这是一个很好的散列算法,但出于安全目的而被破坏

     

目前,使用crypt和CRYPT_BLOWFISH是最佳做法。

从我的回答:Help me make my password storage safe


至于臭名昭着的记住我选项。

创建随机令牌并以cookie的形式将其提供给用户。 如果用户使用此令牌提供cookie,则授予他们访问权限。关键是只接受每个令牌一次。因此,在使用它之后,将其替换为新的随机令牌。

这个令牌实质上只是另一个密码。因此,为了保证安全,您不要存储令牌,而是存储它的哈希值。 (就像你使用密码一样)

遗憾的是,您建议将Cookie绑定到IP地址不起作用。许多人拥有动态IP地址,有些甚至在单个会话期间从请求变为请求。 (例如,这是由负载平衡代理引起的。)


向服务器发送密码

当前可用于从Web浏览器向服务器发送密码的唯一方法是使用SSL加密连接。其他任何东西都不安全,因为您无法保证客户端解决方案的完整性。

答案 2 :(得分:0)

  • 永远不要发明自己的加密 机制。使用别人的。 加密是非常棘手的,除非 你是布鲁斯施奈尔,你有 改善的可能性极小 它,虽然有很大的机会 把它弄乱了。
  • 不加密密码,哈希。
  • 如果您正在使用哈希,请加盐。
  • 如果你没有 使用直接哈希,使用HMAC, 他们更加抗拒 预先计算的攻击。
  • 如果你是 在不安全的情况下发送东西 链接,在传输中添加NONCE 防止重播攻击。这样 对于客户端 - >服务器和 服务器 - >客户端。
  • 如果您使用的是盐和壬烯,请确保它们具有高熵。 '秘密'不是一个好主意。使它随机,使其长,使其使用大字符集。额外的计算成本很小,但您从中获得的安全性是巨大的。如果您不确定如何,请使用随机密码生成器,然后使用ent来测量熵。
  • 不要使用 时间戳作为nonce,除非你有 一个非常具体的需求,真的知道 你在做什么。
  • 使用会话 保护。 SSL并不完美,但是 它比任何事都好。
  • 如果您使用的是SSL,请务必禁用弱协议。 SSL会话以双方可以执行的密码列表的“产品”开始。如果你让客户使用弱者,攻击者一定会使用它。
相关问题