我想做一个用户登录系统,用于学习。我有几个问题。
我做了一些研究,发现实现用户登录系统的正确方法是将用户名/id和密码的加密/哈希版本存储在数据库中。当用户登录时,密码在客户端加密(MD5、SHA-1 等)并发送到服务器,与数据库中的密码进行比较。如果它们匹配,则用户成功登录。
此实现可防止 DBA 或程序员看到数据库中密码的明文。它还可以防止黑客在传输过程中截获真实密码。
这是我感到困惑的地方:
如果黑客知道密码的哈希/加密版本(通过破解数据库)或 DBA,程序员只需读取数据库中的文本即可获得密码的哈希版本。然后,他们可以轻松地制作一个程序,将这个散列版本的密码发送到服务器,从而使他们能够成功登录。如果他们能做到这一点,加密密码似乎不是很有用。我想我在这里误解了一些东西。
这是(我上面描述的方式)实现用户登录功能的最流行的方式吗?它是否遵循当前的最佳实践?我是否必须手动完成所有操作,或者某些数据库是否具有执行相同操作的内置功能?对于网站或网络应用程序,是否有最常见的方式/方法?如果是这样,请向我提供详细信息。
我以前的公司使用 couchDB 存储用户登录信息,包括密码。他们并没有在加密方面做太多事情。他们说couchDB会自动加密密码并将其存储在文档中。我不确定这是否是一种安全的方式。如果是这样,那么它对程序员来说非常方便,因为它可以节省大量工作。
这种方式(第 3 点)对于正常使用是否足够安全?其他数据库系统比如 mySQL 有这种能力可以做同样的事情吗?如果是这样,是否意味着使用 mySQL 内置方法就足够安全了?
我不是在寻找一种非常安全的方式来实现用户登录功能。我宁愿寻找一种流行的、易于实现的、适当的、对大多数 Web 应用程序足够安全的方法。请给我一些建议。提供的详细信息将不胜感激。