PHP:仅允许文件下载到授权成员

时间:2014-04-20 18:17:50

标签: php .htaccess

我有一个网站,我希望只有注册会员才能下载特定文件。为此,我有以下结构:

在我拥有原始安装文件的目录中,我创建了一个.htaccess文件:

Order Deny,Allow
Deny from all

并且,从名为 download.php 的文件中,我使用以下方法调用此文件:

<?php
$filename = "127.0.0.1/eye/setup/setup.msi";
if(ini_get('zlib.output_compression'))ini_set('zli b.output_compression', 'Off');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();
?>

但问题是:如果有人知道我的文件的确切位置,他/她可以在他/她的服务器上轻松设置类似的PHP文件,将 $ filename 作为原始位置传递。那么,我如何依靠这个脚本来保证安全呢?

还有其他策略吗?

2 个答案:

答案 0 :(得分:2)

一种解决方案是将下载文件夹保留在DocumentRoot之外。然后download.php将使用本地路径读取它:

$filename = "/path/to/eye/setup/setup.msi"; // or build filename using $_GET

然后这个php代码将从本地路径读取所需文件的内容并设置适当的内容类型。

答案 1 :(得分:0)

您可以在 htaccess 文件中 htpasswd 的帮助下保护您的目录密码。 借助此htpass in htacess