我正在构建一个用户可以创建文件夹和上传文件的应用程序。当然,我需要验证POST值,以便用户无法删除/覆盖他们不允许的文件。我现在正在做的事情:当文件上传时,我在文件名中加了一个后缀,所以" image.jpg"成为" image.jpg-foo"。检查文件路径" ../"和" .. \"。
我的问题是:这个方法足够安全,还是用户仍然可以使用另一个命令到达另一个目录?我不想将文件名更改为随机字符,因为我不想使用数据库(脚本必须尽可能小)。
我的文件路径功能如下所示(我为所有用户输入提供了用户BetterFoldername):
function endswith($string, $test) {
$strlen = strlen($string);
$testlen = strlen($test);
if ($testlen > $strlen)
return false;
return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0;
}
function BetterFoldername($name) {
$name = str_replace("../","",$name);
$name = str_replace("..\\","",$name);
$name = str_replace("//","/",$name);
$name = str_replace("\\\\","\\",$name);
if(endswith($name, "/") || endswith($name, "\\")) {
$name = substr($name, 0, -1);
}
if (preg_match("/[^\sA-Za-z0-9_.\/\-]/", $name)) {
exit("An error occured!");
}
return $name;
}