0

我已经多次看到这个问题,但它与强制下载的代码有很大关系,而且我认为我没有发现任何可能出现的“安全”问题。我希望人们在登录后下载东西(以防止盗链)。我试图用 htaccess 和 PHP 来解决这个问题。PHP文件检查登录,我也有OpenId(东西)。下载部分如下:

    $url = "{$_SERVER['DOCUMENT_ROOT']}/myfolder/{$myfile}";

    if(!is_file($url)) { 
   //whatever
    }elseif (is_file($url)){

    switch($url['extension']) {
            case 'pdf': $ext = 'application/pdf'; break;
            case 'zip': $ext = 'application/zip'; break;
            case 'pps': $ext = 'application/vnd.ms-powerpoint'; break;
            case 'pptx': $ext = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; break;
            case 'docx': $ext = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; break;
            default: $ext = 'application/force-download';
        }    
        header('Pragma: public');   
       header('Expires: 0'); 
       header("Content-Type: application/force-download");
       header("Content-Type: application/octet-stream");
       header("Content-Type: application/download");      
       header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
       header('Cache-Control: private',false);
       header('Content-Type: '.$ext);
       header('Content-Disposition: attachment; filename="'.basename($url).'"');
       header('Content-Transfer-Encoding: binary');
       header('Connection: close');
       readfile($url);   
       exit();
     }

Myfolder受到拒绝所有人的 htaccess 保护。我不确定这是否足够安全,所以在我做一些非常不安全的事情之前我会问。我已经阅读过人们可以下载“您宝贵的脚本”,但我不知道如何下载(据我所知,PHP 是不可下载的)。你认为我有严重的漏洞,除了 XSS,顺便说一下,在那个页面的某个地方处理?提前致谢。

4

1 回答 1

1

正如评论中已经提到的那样,您无法在使用echo.

另外:请务必清理$myfile用于生成文件路径的 var,然后用于realpath仔细检查生成的路径是否在“允许”路径列表中。否则有人可能会通过类似的东西../../../supersecret/file,你就有麻烦了。

于 2013-09-02T12:39:02.860 回答