2010-06-11 35 views
2

我得到一个用户文件的文件路径,我想确保这个路径是有效的现有用户文件,而不是伪造或系统文件,或者类似的东西。PHP:文件存在并位于某个子目录中

我知道我可以使用file_exists检查它的存在,但我不知道我应该如何确保文件在某个子目录...

回答

1

你应该知道的硬链接和符号链接。如果您要更改文件,请执行统计以检查它是否是常规文件并且其节点数是1.

$subdirToCheck = "/home/mysubdir/"; 
$file = "relativepath/userfile"; 
$absfile = realpath($file); 
if ($absfile !== FALSE && file_exists($absfile) && 
     substr($absfile, 0, strlen($subdirToCheck)) == $subdirToCheck) { 
    $ls = lstat($absfile); 
    if (is_link($ls) || $ls["nlink"] > 1) { 
     //abort 
    } 
    else { 
     //do stuff 
    } 
} 
+0

不错。似乎您可以跳过file_exists:* realpath()在失败时返回FALSE,例如,如果文件不存在。* – Svish 2010-06-11 16:09:46

+0

也不确定在我的情况下链接检查是否必要,因为它们必须先在该目录中创建? – Svish 2010-06-11 16:12:39

+0

@Svish是的,但看到更新日志。至于你的另一点,如果你可以保证目录及其子目录不包含符号链接,你可以跳过检查。 – Artefacto 2010-06-11 16:16:29

相关问题