2
我得到一个用户文件的文件路径,我想确保这个路径是有效的现有用户文件,而不是伪造或系统文件,或者类似的东西。PHP:文件存在并位于某个子目录中
我知道我可以使用file_exists检查它的存在,但我不知道我应该如何确保文件在某个子目录...
我得到一个用户文件的文件路径,我想确保这个路径是有效的现有用户文件,而不是伪造或系统文件,或者类似的东西。PHP:文件存在并位于某个子目录中
我知道我可以使用file_exists检查它的存在,但我不知道我应该如何确保文件在某个子目录...
你应该知道的硬链接和符号链接。如果您要更改文件,请执行统计以检查它是否是常规文件并且其节点数是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
}
}
不错。似乎您可以跳过file_exists:* realpath()在失败时返回FALSE,例如,如果文件不存在。* – Svish 2010-06-11 16:09:46
也不确定在我的情况下链接检查是否必要,因为它们必须先在该目录中创建? – Svish 2010-06-11 16:12:39
@Svish是的,但看到更新日志。至于你的另一点,如果你可以保证目录及其子目录不包含符号链接,你可以跳过检查。 – Artefacto 2010-06-11 16:16:29