是否可以将服务器上的文件/目录的首选项设置为不可下载,但是如果用户有会话,他可以访问文件并可以下载它们。
我知道我可以用$_SESSION
禁用"下载按钮",例如:
$downloadbutton = "<a href='abc.jpg'>Download</a>";
if($_SESSION["xy"] == "abc"){
echo $downloadbutton
}
但是可以通过www.url.com/directpath/abc.jpg
访问该文件
那么如何保护文件呢?
要更好地控制下载,您可以使用以下功能:
function makeDownload($file, $dir, $type) {
header("Content-Type: $type");
header("Content-Disposition: attachment; filename="$file"");
readfile($dir.$file);
}
如果您想确保下载访问,则永远不应该从原始URL实际提供文件,请始终使用文件代理。这样,用户永远不会看到文件的来源,只能使用您的代理脚本,您可以在其中控制是否可以提供该文件。
如果你环顾四周,有大量的脚本已经专门编写了。您可以在此处找到其中之一,并将会话验证添加到其中。
您可以通过在.htaccess
中检查PHPSESSID
cookie来限制直接访问:
RewriteEngine on
RewriteCond %{HTTP_COOKIE} PHPSESSID=[^;]
RewriteRule .* - [L]
RewriteRule .* - [F,L]
更好的 SetEnv 示例:
SetenvIf Cookie PHPSESSID=[^;] permit
Allow from env=permit
Deny from all