在Authorization intro页面上,Apache告诉我们:
Apache支持另一种身份验证方法:AuthType Digest。这个 方法由mod_auth_digest实现,更安全。
在mod_auth_digest页面上,Apache告诉我们:
此模块实现HTTP摘要式身份验证(RFC2617)和 提供mod_auth_basic的替代方法,其中密码不是 以明文形式传播。但是,这并没有带来重大意义 安全优于基本身份验证。另一方面, 使用摘要,服务器上的密码存储安全性低得多 身份验证,而不是基本身份验证。
有人可以为我澄清这些看似矛盾的陈述吗?我知道处理密码的两种方式都容易受到重放攻击(除非你也使用SSL),但这似乎是一个单独的问题。
答案 0 :(得分:10)
使用基本身份验证时,密码几乎以普通(base64编码)的形式发送到服务器,在服务器端进行哈希处理,并与散列密码(存储在htpasswd文件或类似文件中)进行比较。使用摘要式身份验证,散列密码将发送到服务器(添加了一些服务器定义的数据,因此重放攻击将不起作用)。但要验证密码,您需要在服务器端使用普通密码(或接近普通密码的密码)。这意味着,如果攻击者可以访问htpasswd文件,则需要先破解所有密码才能用于基本身份验证,而如果它可以访问htdigest文件,则可以直接使用它进行摘要身份验证。
总结:基本身份验证在线路上安全性较低,但在服务器上存储更安全。因此,两者的最佳选择是使用SSL的基本身份验证。但是,两种身份验证技术都有缺点,即无法进行会话超时或显式注销,例如:浏览器将保持登录状态,直到它关闭。这使得像CSRF这样的攻击更容易。