PHP Force Download - 限制可能的文件下载

时间:2015-08-31 09:08:35

标签: php security download

我使用以下方法强行下载MP3文件:

  

http://www.aaronfagan.ca/blog/2014/how-to-use-php-to-force-a-file-download/

基本上使用PHP行强制下载

<?php
    if ($_GET['id']) {
        $file = $_GET['id'];
        header("Content-Description: File Transfer"); 
        header("Content-Type: application/octet-stream"); 
        header('Content-Disposition: attachment; filename="'.basename($file).'"');
        header("Content-Length: ".filesize($file));
        readfile($file);
    }
    else {
        header('Location: http://www.mywebsite.com/error/');
    }
?>

我是否理解任何了解其工作原理的人基本上可以在任何网站上下载任何文件?

例如,如果我将该文件放在mywebsite.com的根目录中,任何有知识的人都可以使用以下链接在任何地方下载任何文件?:

http://www.mywebsite.com/download.php?id=http://www.anywebsite/files/file.pdf

或者只能在我的网站上使用?

我希望用户能够下载的文件是MP3文件,是否有"restrict" "download.php"处理的文件类型的方法?所以这样"Content-Type"只能设置为MP3文件,这样"hack"会被限制吗?

2 个答案:

答案 0 :(得分:0)

  

例如,如果我将该文件放在mywebsite.com的根目录中,那么任何人   知识可以使用以下链接下载任何   文件在哪里?:

     

http://www.mywebsite.com/download.php?id=http://www.anywebsite/files/file.pdf

如果权限为 http://www.anywebsite/files/file.pdf 打开(这意味着您可以使用浏览器打开/下载 file.pdf ),则可以使用您的脚本远程下载(但因为我现在 basename 用于本地路径), 但通常会拒绝直接下载权限(您也可以关闭权限)。

此外,如果您需要,可以将captcha添加到下载方法以禁用抓取

感谢。

答案 1 :(得分:-1)

您的代码仅适用于您的网站。

要从其他服务器提供资源,您可以使用此脚本Resource-Proxy

祝你好运