HTTPS URL 中的用户名和密码是否安全?

rai*_*ker 8 security https

我正在向 URL https://username:password@example.com发送 POST 请求在我的脚本中。我知道 HTTPS 加密凭据,因此它们不应该在网络上可见。

但是服务器日志呢,它们会在那里可见吗?

使用这种方法还有其他缺点吗?

如何使客户端/服务器端的身份验证更安全?

Iak*_*vos 4

您可以在此处找到更多信息:HTTPS URL 是否已加密?(tl;dr:您发送它的方式很可能没有加密,但您可以将凭据作为 URL 参数发送,以使其加密)。

接下来,如果您已经开发了服务器/可以控制,则由您决定是否保留日志。如果您不确定,可能会有日志。使用(尤其是明文,但不仅仅是)密码保存日志并不是一个好的做法。

服务器不应以明文形式存储密码。相反,密码应该与一些随机盐一起存储(更多信息在这里: https: //security.stackexchange.com/questions/111893/how-to-use-password-salt-the-right-way),而不是明文形式。例如,可以使用诸如PBKDF2Rfc2898DeriveBytesArgon2password_hash之类的一种方式函数。这些比加盐哈希( https://security.stackexchange.com/questions/51959/why-are-salted-hashes-more-secure-for-password-storageBcrypt )有优势,它们还增加了一些额外的CPU时间( ~100ms),延迟了尝试暴力攻击的攻击者,因此它们应该是首选(感谢zaph的更新)。

一般来说,如果服务器受到威胁,读取日志只是攻击者获取用户信息的一种方法。一旦您已经使用 SSL 并且不将凭据作为域名的一部分(因此以明文形式)发送,增强身份验证安全性与阻止攻击者远离您的服务器密切相关。使用加盐哈希是必须的(这样在发生泄露的情况下用户密码仍然安全),从那时起它实际上取决于您的预算。完美的安全性是不可能的,但是您采取的对策越多,您的服务器就越难受到损害。但这是一个巨大且非常有争议的话题,无法在 StackOverflow 答案中进行总结。

编辑:根据zaph的评论更新以修复当前密码存储的最佳实践。

  • 加盐哈希已经不够了。当保存密码验证器时,仅使用哈希函数是不够的,仅添加盐对于提高安全性几乎没有作用。相反,使用随机盐迭代 HMAC 大约 100 毫秒,并使用哈希值保存盐。最好使用“PBKDF2”、“Rfc2898DeriveBytes”、“Argon2”、“password_hash”、“Bcrypt”等函数或类似函数。关键是让攻击者花费大量时间通过暴力破解来查找密码。 (2认同)