12.3 基本认证的安全缺陷

基本认证简单便捷,但并不安全。只能用它来防止非恶意用户无意间进行的访问,或将其与 SSL 这样的加密技术配合使用。

基本认证存在下列安全缺陷。

  • 基本认证会通过网络发送用户名和密码,这些用户名和密码都是以一种很容易解码的形式表示的。实际上,密码是以明文形式传输的,任何人都可以读取并将其捕获。虽然 Base-64 编码通过隐藏用户名和密码,致使友好的用户不太可能在进行网络观测时无意中看到密码,但 Base-64 编码的用户名和密码可以很轻易地通过反向编码过程进行解码,甚至可以用纸笔在几秒钟内手工对其进行解码!所以经过 Base-64 编码的密码实际上就是“明文”传送的。如果有动机的第三方用户有可能会去拦截基本认证发送的用户名和密码,就要通过 SSL 加密信道发送所有的 HTTP 事务,或者使用更安全的认证协议,比如摘要认证。

  • 即使密码是以更难解码的方式加密的,第三方用户仍然可以捕获被修改过的用户名和密码,并将修改过的用户名和密码一次一次地重放给原始服务器,以获得对服务器的访问权。没有什么措施可用来防止这些重放攻击。

  • 即使将基本认证用于一些不太重要的应用程序,比如公司内部网络的访问控制或个性化内容的访问,一些不良习惯也会让它变得很危险。很多用户由于受不了大量密码保护的服务,会在这些服务间使用相同的用户名和密码。比如说,某个狡猾的恶徒会从免费的因特网邮件网站捕获明文形式的用户名和密码,然后会发现用同样的用户名和密码还可以访问重要的在线银行网站!

  • 基本认证没有提供任何针对代理和作为中间人的中间节点的防护措施,它们没有修改认证首部,但却修改了报文的其余部分,这样就严重地改变了事务的本质。

  • 假冒服务器很容易骗过基本认证。如果在用户实际连接到一台恶意服务器或网关的时候,能够让用户相信他连接的是一个受基本认证保护的合法主机,攻击者就可以请求用户输入密码,将其存储起来以备未来使用,然后捏造一条错误信息传送给用户。

这一切说明,在友好的环境,或者说是希望有隐私保护但隐私保护并不十分必要的环境中,可以通过基本认证来提供便捷的文档个性化服务或访问控制保护。通过这种方式,可以用基本认证来防止一些好奇的用户无意中或不小心对文档进行访问。1

1 小心,基本认证中使用的用户名和密码要有别于你在更安全的系统中所使用的密码,否则恶意用户就可以用它们来攻破你的安全账户了!

比如,在一个公司内部,产品管理可能要对未来的产品计划进行密码保护,以防止信息的过早发布。对一般用户而言,基本认证就足以让他们感到不便而不会再去访问这些数据了。2 同样,你可能会用密码来保护那些并非高度机密的,或者没什么信息价值的私人照片或私有站点,这些信息确实和其他人也没什么关系。

2 尽管不是非常安全,但公司内部的员工通常也没有太大的动力去恶意捕获这些密码。这也说明,公司确实会有间谍,也确实会有不满,想要报复的员工,所以,明智的做法是对一旦被恶意获取就会造成很大损害的数据应用更安全的策略。

将基本认证与加密数据传输(比如 SSL)配合使用,向恶意用户隐藏用户名和密码,会使基本认证变得更加安全。这是一种常用的技巧。

我们会在第 14 章讨论安全加密技术。下一章将介绍更复杂的 HTTP 认证协议——摘要认证,摘要认证具有比基本认证更强的安全特性。