我想为了学习制作一个用户登录系统,进行了一些研究后发现正确的实现方式是在数据库中存储用户名/ID和密码的加密/哈希版本。当用户登录时,密码会在客户端进行加密(MD5,SHA-1等),然后发送到服务器进行比对。如果匹配成功,则用户可以成功登录。
这种实现方法可以防止数据库管理员或程序员查看数据库中明文密码。同时也能够防止黑客窃取传输中的真实密码。
以下是我困惑的地方:
如果黑客通过攻击数据库获得了密码的哈希值/加密版本,或者数据库管理员、程序员只需简单地读取数据库中的文本即可获得密码的哈希版本,他们可以轻松地编写程序将该哈希版本的密码发送到服务器以成功登录。如果能够这样做,那么加密密码似乎就没有多大用处。我觉得我可能有什么误解。
这种实现用户登录功能的方式是否最受欢迎?它是否符合当前的最佳实践?我是否必须手动完成所有操作,还是某些数据库具有内置功能以执行相同的操作?如果有,请提供详细信息。
我以前的公司使用couchDB存储用户登录信息,包括密码。他们没有在加密方面做太多工作。他们说couchDB会自动加密密码并将其存储在文档中。我不确定这是否安全。如果是的话,对程序员来说非常方便,因为它可以节省很多工作。
这种方式(第3点)是否足以保证正常使用的安全性?其他数据库系统如MySQL是否具有此类功能以执行相同操作?如果是,那么使用MySQL内置方法是否足够安全?
我不是在寻找一个非常超级安全的实现用户登录功能的方式,而是希望能够找到一种流行、易于实现、适当并且对大多数Web应用程序来说足够安全的方式。请给我一些建议。真诚感谢提供的详细信息。