安全文件和文件夹名称:验证所需的功能

时间:2015-03-25 09:10:59

标签: php security

我正在构建一个用户可以创建文件夹和上传文件的应用程序。当然,我需要验证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;
}

0 个答案:

没有答案