PHP使用url查询下载文件 - 所有威胁是什么?

时间:2018-03-24 11:15:15

标签: php html apache security

没有运气在互联网上找到答案所以我想我会问专家。使用url查询下载文件会带来哪些安全威胁,例如这样的代码:

if(isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != ""){
    $file = urldecode($_SERVER['QUERY_STRING']);
    if(file_exists("files/".$file)){
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header("Content-Transfer-Encoding: Binary");
        header('Content-Disposition: attachment; filename="'.basename($file).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize("files/".$file));
        ob_clean();
        flush();
        readfile("files/".$file);
        exit;
    }
}

会受到像“?.. \ .. \ .. \ any \ file \ here”这样的查询字符串的影响,但不是全部吗?这不能被一个if过滤掉吗?

    $file = urldecode($_SERVER['QUERY_STRING']);
    if(strpos($file, ".\\") !== false || strpos($file, "./") !== false){
        echo "No you won't get my system files";
        exit;
    }

如果没有“上传”功能,阻止访问\ files \目录和“if strpos”的.htaccess文件会安全吗?

编辑:错误的代码示例

1 个答案:

答案 0 :(得分:0)

1)您很容易受到..\..\..\any\file\here

的攻击

2)我建议你在files/中获取所有子文件的列表。然后,如果请求的文件与任何这些文件都不匹配,则返回404错误代码。

PHP read sub-directories and loop through files how to?