首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》18.4 提供安全存储

关灯直达底部

通常,3种不同类型的存储数据(HTML或PHP文件、与脚本相关的数据和MySQL数据)存储在同一磁盘的不同地方,图18-1中分别显示了这些数据。每一种存储类型的数据需要不同的预防措施,并且独立检查。

最危险数据类型就是可执行的内容。在网站上,可执行内容通常都是指脚本。需要注意的是,文件权限是否在网络安全层次里面设置正确。也就是,目录树是从Apache服务器上的htdocs目录,或者IIS服务器上的inetpub目录开始。为了看到脚本的输出,需要允许用户阅读脚本,但他们不能写入或编辑脚本。

同样的限制应用于Web层次结构的目录中。只有我们能够修改这些目录。其他用户(包括Web服务器运行的用户)不允许在这个目录中修改文件或者创建新文件,因为这个目录能够从Web服务器上下载。如果允许其他人在此目录中创建文件,他们就有可能创建一些恶意的脚本并通过Web服务器执行它。

如果脚本需要有写入文件的权限,就要在Web服务器的目录树结构以外创建一个目录。对于文件上传脚本,这是非常正确的。请注意,所创建的脚本和数据不要混在一起。当写入重要的数据时,可能首先要对它们进行加密,但是这种方式通常没有什么价值。我们这样考虑:如果在Web服务器上的文件名为creditcardnumbers.txt,一个黑客能够进入服务器并读取此文件,那它还能读什么呢?为了加密和解密数据,需要一个加密数据的程序,一个解密数据的程序,以及一个或者更多的密钥文件。如果解密高手能够读取数据,就没有什么能够阻止他读取密钥和其他文件。

只有当解密数据的密钥和软件没有存储在服务器上,而存储在另一台机器上时,Web服务器上的加密数据才可能有价值。安全处理重要数据的一个方法是在服务器上加密数据,然后将它传输到另一台机器,可以通过E-mail形式传输。

数据库的数据与数据文件类似。如果正确安装了MySQL,那么只有MySQL能够写数据文件。这意味着在MySQL中我们只要注意用户的访问权限就可以。我们已经讨论MySQL本身的权限系统,在特定的机器上它可以分配特定的权限给用户。

需要特别提出的是,我们经常需要在PHP脚本中编写MySQL密码。PHP脚本基本上是能够公开下载的。这并不是起初看起来那么严重的灾难。除非Web服务器系统崩溃,否则从外面来看PHP资源是不可见的。

如果Web服务器是利用PHP解析器根据扩展名.php来解释文件的,外面的人将不能够看到没有解析的源文件。然而,当使用其他扩展名时,应该小心。如果把.inc文件放到网站目录下,任何请求它们的人都可以收到没有解析的源文件。因此,需要将包含文件放网络之外,设定服务器不发送这种扩展名的文件,或者在这些文件中用.php作为扩展名。

如果与其他人共享一台Web服务器,MySQL密码对同一台机器上的其他用户可能是可见的,他们通过同样的Web服务器也能够运行脚本。根据系统的安装方式,这可能是不可避免的。服务器安装时设置为以单用户运行脚本,或者每个用户只运行自己的网站实例可以避免这个问题。如果你不是Web服务器的管理员(如果共享一个服务器就很可能出现这种情况),那么与你的管理员讨论这个问题,以及探讨安全选项是很有必要的。