[英]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项目,您可能会发现它很有用-如果没有其他想法,请联系我:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.