17.2.3 保护多个网页
要使类似于脚本程序清单17-1和程序清单17-2的脚本能够保护多个网页将更加困难。因为HTTP是无状态的,来自同一个人的连续请求之间并没有自动的连接或联系。这就使得将数据在页与页之间的传递变得更加困难,例如用户输入的身份验证信息。
保护多个网页最简单的方法就是使用Web服务器提供的访问控制机制。我们将简要地讨论这些内容。
要自己创建该功能,可以在每个要保护的网页中包含程序清单17-1中的部分脚本。使用auto_prepend_file和auto_append_file,可以自动地在特定目录下的每个文件中预先计划并添加所需的代码。要了解这些指令的使用,请参阅第5章。如果使用这种方法,当访问者进入网站后,访问多个网页时又会出现什么情况呢?网站会要求他们每浏览一页时都重新输入名字和密码,显然,这对访问者来说难以接受的。
我们可以将他们输入的细节信息附加网页的每个超级链接中。由于用户可能输入在URL中不允许出现的空格或者其他字符,应该使用urlencode()函数对这些字符进行安全的编码。
尽管如此,该方法仍然会有一些问题。因为这些数据将包含在发送给用户的网页和他们访问的URL中,他们访问的受保护页可以被任何使用同一台计算机的人看见,这些人可以通过回退步骤看到以前的缓存页,或者通过查看浏览器的历史清单而浏览这些受保护页。因为我们在每页被请求或者发送时重复地发送密码到浏览器,这些敏感信息的传输频率更高。
现在,有两个很好的方法可以解决这些问题:HTTP基本身份验证和会话。基本身份验证克服了缓存问题,但是在每次请求时,浏览器仍然会将密码发送给服务器。会话控制技术克服了这两方面问题。下面,我们将首先介绍HTTP基本身份验证,在第23章中,我们将介绍会话控制,在第27章中将更详细地讨论它。