16.4.5 文件系统因素
请记住,PHP是为能够与本地文件系统交互而设计的。需要注意两个问题:
■写到硬盘上的任何文件是否可以被其他人看到?
■如果向其他用户开放一个功能,他们是否能够访问我们不希望别人访问的文件,例如/etc/passwd?
当写一个文件时需要特别注意:这个文件是否具有广泛的打开权限,或者它们是否被保存在一个多用户操作系统(各种UNIX变体)下其他用户可以访问的位置。
此外,还必须特别注意让用户输入一个他们期望看到的文件名称的情况。如果在文档根目录(C:\Program Files\Apache Software Foundation\Apache2.2.htdocs\)中有一个目录包含了已经授权给用户访问的大量文件,而且他们可以输入他们希望看到的文件名称,如果他们请求查看如下所示的文件,我们将面临安全问题:
......\php\php.ini
这将让用户知道PHP的安装路径,这样便于他们寻找任何明显的缺陷。当然,要修复这个问题是非常容易的:如果接受用户输入,请确保能够严格的执行输入过滤,从而避免这样的问题。在前面的例子中,删除任何出现的“..\”将防止这种问题的出现,同样,任何访问绝对路径的情况也需要避免,例如C:\mysql\my.ini。