首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在用户发送密码到服务器收到密码之间会发生什么?

问在用户发送密码到服务器收到密码之间会发生什么?
EN

Stack Overflow用户
提问于 2014-03-21 11:18:23
回答 1查看 31关注 0票数 0

我在试着理解一些事情。当我在服务器和客户机中实现PBKDF2时,我的理解是(对不起,可能大错特错),服务器将加密/散列的密码保存在数据库中,用户通过网络发送他或她的密码,然后服务器检查其有效性。

我好奇的是,我到底该如何防止用户在网络上提交的内容被看到,以及用户的密码被暴露?我是否仅依靠网络库或SSL来保护此信息?

我如何确保通过网络发送的密码是不容易暴露的,但仍然可以被服务器读取以检查哈希?

在密码客户端执行SHA2散列,然后将其发送到服务器,然后根据PBKDF2散列检查sha2是否明智?服务器将永远不会真正知道用户的密码,唯一可能的恢复选项是重置它。这种类型的系统可以接受吗?

这些事情通常是由专业人士做的吗?

EN

回答 1

Stack Overflow用户

发布于 2014-03-21 14:23:29

当我在服务器和客户端实现PBKDF2时,我的理解是服务器将加密/散列的密码保存在数据库中,用户通过网络发送他或她的密码,然后服务器检查其有效性。

这基本上是正确的。设置帐户时,用户向服务器发送user和pass。服务器存储user和PBKDF2(pass),然后丢弃pass。登录时,服务器将查找user列,并将PBKDF2(pass_as_submitted)与设置帐户时存储的值进行比较。如果它们匹配,则对用户进行身份验证。

我是仅仅依靠网络库还是SSL来保护这些信息?

在你所说的那种情况下,是的。

在密码客户端执行SHA2散列,然后将其发送到服务器,然后根据PBKDF2散列检查sha2是否明智?

不是的。这里的问题是,您只是将您保存的内容从用户的密码更改为用户密码的哈希。可以读取数据库的攻击者仍然知道这一点。

(这比知道密码稍微好一些是有原因的,尤其是在密码重用的情况下。然而,这些并不能证明这种方法是合理的。)

同样值得一提的是,SHA2(password)不会与PBKDF2(password)相匹敌。

这些事情通常是由专业人员做的?

首先,使用TLS (也称为SSL)。在客户端和服务器之间建立良好的加密连接是第一要务。对于一个网站,你应该在每个页面上使用TLS,而不仅仅是在发送密码的时候。至少必须在登录页面和接收用户名和密码信息的请求上使用它。

你的TLS连接应该正确设置:如果合适的话,它应该使用HSTS (并且它是一个网站)。它应该避免过时的算法(如果可能,只支持TLS 1.1+ )。它应该使用适当的加密模式。

除此之外,这取决于您的用例。也许实现双因素身份验证是值得的--使用TOTP或SMS代码或类似的方式。也许您应该考虑没有密码的登录,例如使用客户端TLS证书或OAuth2令牌。也许您应该使用现有的身份验证库,如Kerberos。也许您需要查看密码策略,以确保用户设置了正确的密码或口令短语。

这些问题很复杂,并且取决于您的用例。思考它们是大多数人不会迈出的重要的第一步。使用PBKDF2是一个很好的开始,但没有通用的答案。如果可能,请一位专家来做安全分析。如果没有,开源加上一些促销活动通常可以让人们看到它。最坏的情况,阅读有关安全的知识,查看OWASP Top 10,并考虑系统的每个部分。在可能的情况下,使用专家制作的现有库。如果你必须自己做,你可能做错了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22549499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档