2

首先,如果我在搜索时已经问过这个问题并且找不到确切的问题和答案,我深表歉意。

所以让我们开始我想强制.mp3文件下载而不是播放因此我在download.php中使用以下代码

    <?php
/**
 * Download the mp3 file.
 */
$file_name = $_GET["filename"];
$file_url = $_GET["fileurl"];

header("Content-Description: File Transfer");
header('Content-type: application/mp3');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"".$file_name."\"");
readfile($file_url);
exit;

因此,当用户单击目标为http://www.example.com/download.php?filename=example.mp3&url=http://www.example.com/example.mp3的链接时,可以保存文件。

所以我想要的是防止直接访问文件http://www.example.com/download.php

并允许用户使用 url 下载文件:http ://www.example.com/download.php?filename=example.mp3&url=http://www.example.com/example.mp3

4

3 回答 3

0

首先,盲目地readfile()从请求中定义的参数调用会带来巨大的安全风险。

我的建议是只接受文件名,然后构建一个包含文件名和 mp3 文件夹路径的完整文件路径。然后确保文件存在,然后执行readfile()

注意您的 mp3 文件夹应该在您的公共 html 文件夹之外,或者如果不是,至少为您的 Web 服务器配置一个访问规则,以防止直接访问该文件夹。

其次,防止在没有参数的情况下访问您的 php 文件的唯一方法是使用重写规则(如果您的 Web 服务器支持它)

一个更简单的方法可能是检查是否没有文件名参数,然后有一个默认行为,即重定向到主页等。这也可能是默认行为指定文件不存在。

最后,我有一个你可能会觉得有用的 GitHub 项目——如果没有别的想法的话:

https://github.com/iNamik/PHP-Download-Tracker

于 2012-11-26T18:30:15.697 回答
0

你的意思是这样的吗?

if($_GET['filename'] == ''){
         header("Location: http://someLocation.com/");
    }
于 2012-11-26T18:07:15.103 回答
0

如果您使用的是 apache 服务器,您可以使用 .htaccess 拒绝访问某些文件。

这是您可以添加到.htaccess文件中的示例:

<Files /example.mp3>
    Order Allow,Deny
    Allow from all
</Files>
于 2012-11-26T17:33:19.933 回答