使用 Apache,设置一个页面非常简单,该页面使用基本访问身份验证提示用户输入名称/密码,并以某种方式使用这些凭据授予该用户访问权限。
假设客户端和服务器之间的连接是安全的,这是否安全?
使用 Apache,设置一个页面非常简单,该页面使用基本访问身份验证提示用户输入名称/密码,并以某种方式使用这些凭据授予该用户访问权限。
假设客户端和服务器之间的连接是安全的,这是否安全?
对基本身份验证的担忧在于凭据以明文形式发送,并且容易受到数据包嗅探的影响,如果该连接使用 TLS/SSL 保护,那么它与使用加密的其他方法一样安全。
这是一个旧线程,我不相信最高投票/选择的答案是正确的。
正如@Nateowami 所指出的,安全堆栈交换线程概述了基本身份验证的一些问题。
我想指出另一个问题:如果您正确地进行了密码验证,那么基本身份验证会使您的服务器更容易受到拒绝服务的攻击。为什么?在过去,人们普遍认为加盐哈希足以验证密码。 现在已经不是这样了。如今,我们说您需要使用慢速函数来防止在数据库暴露(这种情况经常发生)的情况下暴力破解密码。如果您使用基本身份验证,那么您将强制您的服务器在每个 API 调用上进行这些缓慢的计算,这给您的服务器增加了沉重的负担。您只需使用这种过时的身份验证机制,就使其更容易受到 DoS 攻击。
更一般地说,密码比会话更有价值:用户密码的泄露允许无限期劫持用户的帐户,更不用说由于密码重用而劫持用户访问的其他系统的可能性;而用户会话是有时间限制的,并且仅限于单个系统。因此,作为纵深防御,密码等高价值数据在非必要时不应重复使用。基本身份验证是一项过时的技术,应弃用。
大多数网站更喜欢 OAuth 而不是 Basic Auth 的原因是 Basic Auth 要求用户在 3rd 方应用程序中输入密码。这个第 3 方应用程序必须以明文形式存储密码。撤销访问的唯一方法是让用户更改他们的密码。但是,这将撤销所有 3rd 方应用程序的访问权限。所以你可以看到这里有什么问题。
另一方面,OAuth 需要一个网络框架。用户在此特定站点本身的登录页面输入他们的登录信息。然后,该站点会生成一个访问令牌,该应用程序可以在将来使用它来验证自己。优点:
在可以嗅探的环境中通过 http 进行基本身份验证就像没有身份验证一样,因为密码可以很容易地反转然后重新使用。针对上面关于通过 ssl 的信用卡“有点”更安全的尖刻评论,问题是基本身份验证在同一通道上一遍又一遍地使用。如果您泄露了一次密码,那么您就损害了该通道上每笔交易的安全性,而不仅仅是单个数据属性。
如果您知道您将在网络会话中一遍又一遍地传递相同的信用卡号,我希望您能想出一些其他的控制,而不是仅仅依靠 SSL,因为很可能使用了信用卡号这经常会受到损害……最终。
如果您正在生成密码,请htpasswd
考虑切换到htdigest
.
即使在未加密的连接上,摘要式身份验证也是安全的,而且设置起来也很容易。当然,当您通过 ssl 时,基本身份验证是可以的,但是当您可以轻松地使用摘要身份验证时,为什么还要冒险呢?
顾名思义,“基本身份验证”只是基本的安全机制。不要依赖它为您提供无忧的安全性。
在它之上使用 SSL 确实使它更安全一些,但有更好的机制。