我正在尝试学习如何开发安全的 Web 应用程序。特别是,我不确定密码是如何从客户端发送到服务器的。对于典型的用户/密码登录表单。如果客户端通过 HTTPS 发送明文用户/传递 POST 请求。这足够安全吗?考虑到服务器使用 bcrypt 之类的东西对明文传递和存储的盐进行哈希处理,并具有足够的迭代次数。
这种情况是否足够安全?忽略其他攻击媒介,例如 SQL 注入、XSS 等。我只是想看看在 POST 请求中通过 SSL 发送纯文本密码是否足够安全,或者在客户端是否需要其他一些安全措施。
我正在尝试学习如何开发安全的 Web 应用程序。特别是,我不确定密码是如何从客户端发送到服务器的。对于典型的用户/密码登录表单。如果客户端通过 HTTPS 发送明文用户/传递 POST 请求。这足够安全吗?考虑到服务器使用 bcrypt 之类的东西对明文传递和存储的盐进行哈希处理,并具有足够的迭代次数。
这种情况是否足够安全?忽略其他攻击媒介,例如 SQL 注入、XSS 等。我只是想看看在 POST 请求中通过 SSL 发送纯文本密码是否足够安全,或者在客户端是否需要其他一些安全措施。
POST
是的,使用over发送信息HTTPS
是典型的做事方式。
完成@Terry 的回答:通过 HTTPS 在 POST 中发送用户名和密码不仅是典型的做法,也是正确的做法。这将为您带来您所希望的最佳安全性。我没有写“良好的安全性”,但你很难做得更好;实际上,在 Web 环境中,您在客户端所做的任何事情都必须使用一些 Javascript……它来自服务器本身。而且,类似地,一旦执行了身份验证,您仍然必须首先传输足够敏感的任何数据以保证身份验证。因此,您仍然必须依靠足够安全的 HTTPS 来防止恶意窃听和篡改。
您仍然需要确保密码输入字段是“隐藏的”,即显示项目符号或星号而不是用户输入的字符,以阻止肩冲浪者。银行喜欢的其他噱头,例如阻止基本键盘记录器的“视觉键盘”,通常不值得努力。
是的,通过传输通道 post 和 HTTPS 来保护用户凭据就足够了。但是身份管理是一个非常大的话题,还有许多其他攻击媒介,您需要考虑这些攻击向量,请参阅此以获取更多信息
使用 HTTPS 实际上是一种做法,但我认为它不应该取代加密功能来保存用户和他自己的密码!
针对 SQLi、XSS、XSE,我建议您阅读https://owasp.org/