Apache Digest身份验证是否更安全或基本与否?

amo*_*mos 12 apache security authentication basic-authentication digest-authentication

Authorization intro页面上,Apache告诉我们:

Apache支持另一种身份验证方法:AuthType Digest.此方法由mod_auth_digest实现,并且更加安全.

mod_auth_digest页面上,Apache告诉我们:

此模块实现HTTP摘要式身份验证(RFC2617),并提供mod_auth_basic的替代方法,其中密码不以明文形式传输.但是,与基本身份验证相比,这不会带来显着的安全优势.另一方面,与基本身份验证相比,使用摘要式身份验证的服务器上的密码存储安全性更低.

有人可以为我澄清这些看似矛盾的陈述吗?我知道处理密码的两种方式都容易受到重放攻击(除非你也使用SSL),但这似乎是一个单独的问题.

Ste*_*ich 12

使用基本身份验证,密码几乎是普通的(base64编码)发送到服务器,在服务器端,它被散列并与散列密码(存储在htpasswd文件或类似文件中)进行比较.使用摘要式身份验证,散列密码将发送到服务器(添加了一些服务器定义的数据,因此重放攻击将不起作用).但要验证密码,您需要在服务器端使用普通密码(或接近普通密码的密码).这意味着,如果攻击者可以访问htpasswd文件,则需要先破解所有密码才能用于基本身份验证,而如果它可以访问htdigest文件,则可以直接使用它进行摘要身份验证.

总结:基本身份验证在线路上安全性较低,但在服务器上存储更安全.因此,两者的最佳选择是使用SSL的基本身份验证.但是,两种身份验证技术都有缺点,即无法进行会话超时或显式注销,例如浏览器在关闭之前将保持登录状态.这使得像CSRF这样的攻击更容易.

  • 两种身份验证协议的安全问题都没有改变,这是当今身份验证通常在 Web 应用程序本身内完成的原因之一(支持注销、超时...) (2认同)
  • @rpilkey:你是对的,你可以存储HA1(参见[维基百科](http://en.wikipedia.org/wiki/Digest_access_authentication)了解其含义)而不是密码,就像你所做的那样。但是,HA1 的泄露相当于密码的泄露,因为攻击者成功进行身份验证交换所需的只是 HA1。因此,这个问题类似于存储明文密码。 (2认同)