如何使文件只能下载,不能被客户端读取

时间:2017-01-12 14:09:21

标签: php apache .htaccess

我正在开发一个php脚本,用户可以上传他们想要的任何类型的文件,甚至是php文件。

所有文件都上传/移动到特定文件夹中(“上传”)。

我不希望这些文件可读,否则会导致严重的安全漏洞,因为用户可以编写任何PHP代码并控制我的服务器。

我希望这些文件只能由用户客户端(浏览器)下载。像Dropbox一样。

1 个答案:

答案 0 :(得分:1)

你可以拒绝上传/移动的访问权限,然后强制从上传/移动到PHP脚本的所有URL重定向

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/uploads/move/(.*)$ /serve_file.php?filePath=$1 [L]
然后发送一个强制下载标题,例如:

header("Content-Disposition: attachment; filename=\"" . basename($File) . "\"");
header("Content-Type: application/force-download");
header("Content-Length: " . filesize($filePath));
header("Connection: close");
readfile($filepath);
exit;

!!确保$ filePath处于上传/移动状态,而不是其他地方,或者他们可以抓取其他文件)!!

感谢@Mark Ba​​ker的优化,使用readfile是一种更好的方法!

相关问题