繁体   English   中英

禁止直接访问php文件,仅允许一个域

[英]Prevent Direct Access to a php file and allow only one domain

首先,我很抱歉如果在搜索时已经提出了这个问题,却找不到确切的问题和答案。

因此,让我们开始吧,我想强制下载.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

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

您可以将以下示例添加到.htaccess文件中:

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

你的意思是这样吗?

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

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

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

注意您的mp3文件夹应位于公共html文件夹之外,否则,请至少为Web服务器配置阻止直接访问该文件夹的访问规则。

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

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

最后,我有一个GitHub项目,您可能会发现它很有用-如果没有其他想法,请联系我:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM