gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:27:48 24 4
gpt4 key购买 nike

我想建立一个用于学习的用户登录系统。我有几个问题。

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

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

这是我很困惑的地方:


如果黑客知道密码的哈希/加密版本(通过对数据库进行黑客攻击)或DBA,那么程序员仅通过读取数据库中的文本即可获得密码的哈希版本。然后,他们可以轻松地创建一个程序,将密码的此哈希版本发送到服务器,从而使其能够成功登录。如果可以这样做,则对密码进行加密似乎不是很有用。我想我对这里有些误解。
这(我上面所述的方式)是实现用户登录功能的最流行的方式吗?它是否遵循当前的最佳做法?我是否必须手动执行所有操作,或者某些数据库具有内置功能来执行相同操作?对于网站或网络应用程序,是否有最常用的方法/方法?如果是这样,请向我提供详细信息。
我以前的公司使用CouchDB来存储包括密码在内的用户登录信息。他们在加密方面没有做太多事情。他们说,ouchDB将自动加密密码并将其存储在文档中。我不确定这是否安全。如果是这样,那么这对程序员来说非常方便,因为它节省了大量工作。
这样(第3点)是否足够安全以正常使用?其他数据库系统(例如mySQL)是否具有可以做相同事情的这种能力?如果是这样,是否意味着使用mySQL内置方法足够安全?


我不是在寻找实现用户登录功能的非常安全的方法。我想寻找一种对于大多数Web应用程序来说足够流行,易于实现,适当且安全的方法。请给我一些建议。提供的细节将不胜感激。

最佳答案

一些澄清:


不要使用MD5。被认为坏了。使用SHA,但我建议使用比SHA1更好的东西。 -https://en.wikipedia.org/wiki/MD5
您没有提及对密码加盐的任何内容。这对于防止Rainbow表至关重要。 -https://en.wikipedia.org/wiki/Rainbow_tables
撒盐/散列密码的想法并不是真正保护您自己的应用程序。这是因为大多数用户在多个站点上都使用了一些密码。散列/加盐防止任何访问您的数据库的人了解这些密码是什么,并使用它们登录其银行应用程序或类似内容。一旦有人获得对数据库的直接访问权,您的应用程序的安全性便已完全受到威胁。 -http://nakedsecurity.sophos.com/2013/04/23/users-same-password-most-websites/
不要使用数据库的内置安全性来处理您的登录。它很容易破解,为他们提供了比应有的方式更多的应用程序访问权限。使用表格。
您什么也没提到SSL。如果密码以纯文本形式通过网络发送,即使是设计良好的身份验证系统也没有用。还有其他方法,例如“质询/响应”,但是不幸的是,当用户注册或更改密码时,仍必须以纯文本形式将密码发送到服务器。 SSL是防止这种情况的最佳方法。

关于authentication - 实现用户登录系统的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com