基本访问认证是否安全?

Nat*_*man 45 http basic-authentication

使用Apache,可以非常简单地设置一个使用基本访问身份验证的页面来提示用户输入名称/密码,并以某种方式使用这些凭据来授予该用户访问权限.

这是安全的,假设客户端和服务器之间的连接是安全的吗?

Chr*_*ver 55

对基本身份验证的担心是凭据以明文形式发送,并且容易受到数据包嗅探,如果使用TLS/SSL保护该连接,那么它与使用加密的其他方法一样安全.

  • 另一个区别:为每个请求重复发送密码.(更大的攻击窗口)请参阅https://security.stackexchange.com/a/990/95555 (14认同)
  • 那么它是否安全?:-D (2认同)

The*_*ini 15

这是一个老话题,我不相信最高投票/选择的答案是正确的.

正如@Nateowami所指出的,安全堆栈交换线程概述了基本身份验证的许多问题.

我想指出另一个问题:如果您正确地进行了密码验证,那么基本身份验证会使您的服务器更容易受到拒绝服务的攻击.为什么?在过去,人们普遍认为盐渍哈希足以进行密码验证. 情况已不再如此.如今,我们说你需要具有缓慢的功能来防止在数据库暴露的情况下暴力强制密码(这种情况经常发生).如果您使用的是基本身份验证,则会强制您的服务器在每次API调用时执行这些缓慢的计算,这会给您的服务器带来沉重的负担.您只是通过使用此日期认证机制使其更容易受到DoS的攻击.

更一般地说,密码的价值高于会话:用户密码的泄露允许无限期地劫持用户的帐户,更不用说劫持用户因密码重用而访问的其他系统的可能性; 而用户会话是有时间限制的,并且局限于单个系统.因此,作为深度防御的问题,如果没有必要,不应重复使用密码等高价值数据.基本身份验证是一种过时的技术,应该弃用.

  • 这不适用于大多数身份验证机制吗?例如基于令牌的身份验证。服务器必须检查每个请求的令牌签名,通常是 RSA 和 SHA2 的混合或仅 SHA2 ... (2认同)

els*_*ooo 5

大多数网站更喜欢 OAuth 而不是 Basic Auth 的原因是 Basic Auth 要求用户在 3rd 方应用程序中输入他们的密码。这个第 3 方应用程序必须以明文形式存储密码。撤销访问的唯一方法是让用户更改其密码。但是,这将撤销所有 3rd 方应用程序的访问权限。所以你可以看到这里有什么问题。

另一方面,OAuth 需要一个 Web 框架。用户在此特定站点本身的登录页面上输入他们的登录信息。然后,该站点会生成一个访问令牌,应用程序可以使用该令牌在将来对其进行身份验证。优点:

  • 可以撤销访问令牌
  • 第三方应用看不到用户密码
  • 可以授予访问令牌特定的权限(而基本身份验证平等对待每个消费者)。
  • 如果第 3 方应用程序证明不安全,服务提供商可以决定撤销为该特定应用程序生成的所有访问令牌。