大家好日子,
我有一个棘手的问题,我无法弄清楚自己。
我制作了一个人们可以上传不同类型文件的网页。这些文件被重命名 - 新文件名存储在数据库中 - 并移至/home/myname/newfilename.xyz
所以我专注于保持这些上传尽可能安全,并防止自己让人们上传“邪恶”文件并以某种方式执行em。
我也做了一种后端,我看到所有上传的文件 - 在那里我想链接文件,以便我可以查看/下载em,但由于它们不在/ var / www目录中,我无法访问em通过链接em像“../../../home/myname/newfilname.xyz”。我知道有不同的方法来进行一轮工作,但在我做某事之前,我想知道是否有人知道最安全的方式。
如果有人在这里可以帮助我,那就太好了。)
干杯
答案 0 :(得分:1)
实现这一目标的一种方法是" stream"用PHP的文件。您将文件引用存储在db中,也许您可以通过id而不是filename引用该文件?
我们假设你创建了这个PHP脚本:
http://mysite/downloadFile.php?fileId=1000
然后你可以通过以下方式实现:
$fileId = $_GET['fileId'];
$fileinfo = getfilenamefromdb($fileId); // fetch filename and mime type from db
if (!$fileinfo) die('File not found');
// access control?
header('Content-type: '.$fileinfo['mimetype']);
$content = file_get_contents('/home/myname/'.$fileinfo['filename']);
echo $content;
您必须实施getfilenamefromdb()
功能,并可能实施访问控制。通过id引用将阻止某人通过询问../../../etc/passwd