实现用户登录系统的正确方法

问题描述 投票:15回答:2

我想创建一个用户登录系统,以便学习。 我有几个问题。

我做了一些研究,发现实现用户登录系统的正确方法是在数据库中存储用户名/ id和密码的加密/散列版本。 当用户登录时,密码在客户端加密(MD5,SHA-1等)并发送到服务器,并与数据库中的密码进行比较。 如果匹配,则用户成功登录。

此实现可防止DBA或程序员在数据库中看到密码的明文。 它还可以防止黑客在传输过程中拦截真实密码。

这是我困惑的地方:

  1. 如果黑客知道密码的哈希/加密版本(通过黑客入侵数据库)或DBA,程序员只需简单地读取数据库中的文本即可获得密码的哈希版本。 然后,他们可以轻松地创建一个程序,将这个哈希版本的密码发送到服务器,允许他们成功登录。如果他们可以这样做,加密密码似乎不是很有用。 我想我在这里误解了一些东西。

  2. 这是(我上面描述的方式)实现用户登录功能的最流行方式吗? 它是否遵循当前的最佳做法? 我是否必须手动完成所有操作,或者某些数据库是否具有执行相同操作的内置功能? 是否有最常用的方法/方法为网站或网络应用程序执行此操作? 如果是这样,请向我提供详细信息。

  3. 我以前的公司使用couchDB存储用户登录信息,包括密码。 他们没有对加密方面做太多的事情。 他们说couchDB会自动加密密码并将其存储在文档中。 我不确定这是否安全。 如果是这样,那对程序员来说非常方便,因为它节省了大量的工作。

  4. 这种方式(第3点)是否足以保证正常使用? 其他数据库系统如mySQL有这种能力可以做同样的事情吗? 如果是这样,是否意味着使用mySQL内置方法足够安全?

我不是在寻找一种非常安全的实现用户登录功能的方法。 我更愿意为大多数Web应用程序寻找一种流行,易于实现,正确,安全的方法。 请给我一些建议。 提供的详细信息将非常感谢。

authentication login authorization password-encryption logonserver
2个回答
14
投票

当用户登录时,客户端代码将通过MD5或SHA-1或类似的东西加密密码,然后将此加密密码发送到服务器端,然后将其与数据库中的密码进行比较。 如果匹配,则用户成功登录。

不,不,客户端需要发送未填充的密码。 如果您在客户端散列密码,那么该散列实际上是密码。 这将使加密散列的安全性无效。 散列必须在服务器端完成。

为了保护传输中的明文密码,需要通过安全通道发送,例如加密的TLS(SSL)连接。


密码应该用一块额外数据是为每个帐户不同 。 Salting通过消除明文和散列之间的直接相关来抑制彩虹表攻击。 盐不需要保密,也不需要非常大。 即使是4个随机字节的盐也会使彩虹表攻击的复杂性增加40亿倍。


现在的行业黄金标准是Bcrypt 。 除了盐析,bcrypt通过设计减速因子来进一步增加安全性。

除了结合使用盐来防止彩虹表攻击之外,bcrypt还是一种自适应功能:随着时间的推移,迭代计数可以增加以使其变慢,因此即使计算能力提高,它仍然可以抵抗暴力搜索攻击....从理论上讲,这并不比标准的Blowfish密钥计划更强,但是密钥更新轮次的数量是可配置的; 因此,这个过程可以任意减慢,这有助于阻止对哈希或盐的暴力攻击。


5
投票

一些澄清:

  1. 不要使用MD5。 它被认为是破碎的。 使用SHA,但我建议一些比SHA1更好的东西。 - https://en.wikipedia.org/wiki/MD5
  2. 您没有提及有关盐密码的任何信息。 这对于防止彩虹桌来说至关重要。 - https://en.wikipedia.org/wiki/Rainbow_tables
  3. 腌制/散列密码的想法并不是真正保护您自己的应用程序。 这是因为大多数用户都拥有一些用于多个站点的密码。 散列/腌制可以防止任何访问您数据库的人了解这些密码是什么,并使用它们登录他们的银行应用程序或类似的东西。 一旦有人获得对数据库的直接访问权限,您的应用程序的安全性就已经完全受到损害。 - http://nakedsecurity.sophos.com/2013/04/23/users-same-password-most-websites/
  4. 不要使用数据库的内置安全性来处理登录。 这是hacky并为他们提供了比他们应有的更多的应用程序访问。 使用表格。
  5. 你没有提到任何关于SSL的事情。 如果密码以纯文本形式通过线路发送,那么即使是设计良好的身份验证系统也是无用的。 还有其他方法,如质询/响应,但不幸的是,当用户注册或更改密码时,密码仍然必须以纯文本形式发送到服务器。 SSL是防止这种情况的最佳方法。
© www.soinside.com 2019 - 2024. All rights reserved.