幸运的是,验证用户只是一个非常常见的任务,因此HTTP内置有身份验证功能。脚本或Web服务器可以通过Web浏览器请求身份验证。Web浏览器负责显示一个对话框或类似设备,从而从用户那里获得所需的信息。
尽管Web服务器对每个用户请求都要求新的身份验证详细信息,但Web浏览器不必在每页中都要求用户输入详细信息。通常,浏览器可以保存这些详细信息,只要用户打开一个浏览器窗口,它就会自动地将这些所需的详细信息重新发送到Web服务器而无须用户介入。
HTTP这个特性叫做基本身份验证。使用PHP或者内置于Web服务器中的机制,可以触发这些基本身份验证。接下来,我们将讨论PHP方法、Apache方法。
基本身份验证以普通文本方式传输用户名和密码,因此不太安全。HTT P1.1中包含一种更安全的方法,称为摘要身份验证。摘要身份验证使用哈希算法(通常是MD5)掩饰事务处理的细节。摘要身份验证被许多Web服务器和大多数Web浏览器的最新版本所支持。然而,目前还有许多正在使用的浏览器早期版本不支持摘要身份验证,而且微软的某些IE和IIS版本所包含摘要验证标准的版本与非Microsoft产品并不兼容。
除了对Web浏览器的支持较差之外,摘要身份验证也不很安全。基本身份验证和摘要身份验证都只能提供低级别的安全。它们都不能保证用户正在处理的机器就是他要访问的机器。它们都可能允许入侵者向服务器重复发送同一请求。因为基本身份验证以普通文本的方式传输用户密码,这就使入侵者能够捕获这些信息包,并冒充该用户发送任何其他的请求。
基本身份验证提供的安全级别(低)与人们常用的通过Telnet或FTP连接机器一样,都是以普通文本方式传输密码的。摘要身份验证更安全一些,在传输密码之前将对密码进行加密。
当将SSL和数字证书结合起来实现基本的身份验证时,所有Web事务处理都可以得到全面的保护。如果希望获得全面的安全保护,请参阅第18章。但是对于许多情况来说,一个速度快但是相对不安全的方法却是合适的方法,例如,基本身份验证。
基本身份验证只能保护特定的领域,并且要求用户提供有效用户名和密码。指定领域是因为同一服务器上可以有多个这样的领域。同一台服务器上的不同文件和目录可以成为不同领域的一部分,每个领域由一组不同的用户名和密码来保护。指定领域也允许将一台主机或一台虚拟主机上的多个目录指定为一个领域,并用一个密码来保护它们。