我有一个网站,我希望只有注册会员才能下载特定文件。为此,我有以下结构:
在我拥有原始安装文件的目录中,我创建了一个.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 作为原始位置传递。那么,我如何依靠这个脚本来保证安全呢?
还有其他策略吗?
答案 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