防止直接访问php文件并仅允许一个域

时间:2012-11-26 17:29:57

标签: php

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

所以让我们开始我想强制.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

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

3 个答案:

答案 0 :(得分:0)

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

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

<Files /example.mp3>
    Order Allow,Deny
    Allow from all
</Files>

答案 1 :(得分:0)

你的意思是这样吗?

if($_GET['filename'] == ''){
         header("Location: http://someLocation.com/");
    }

答案 2 :(得分:0)

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

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

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

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

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

最后,我有一个你可能会觉得有用的GitHub项目 - 如果没有其他的话,那就是想法:

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