访问/ var / www之外的文件的安全方式

时间:2014-04-28 16:45:35

标签: php apache file security

大家好日子,

我有一个棘手的问题,我无法弄清楚自己。

我制作了一个人们可以上传不同类型文件的网页。这些文件被重命名 - 新文件名存储在数据库中 - 并移至/home/myname/newfilename.xyz

所以我专注于保持这些上传尽可能安全,并防止自己让人们上传“邪恶”文件并以某种方式执行em。

我也做了一种后端,我看到所有上传的文件 - 在那里我想链接文件,以便我可以查看/下载em,但由于它们不在/ var / www目录中,我无法访问em通过链接em像“../../../home/myname/newfilname.xyz”。我知道有不同的方法来进行一轮工作,但在我做某事之前,我想知道是否有人知道最安全的方式。

如果有人在这里可以帮助我,那就太好了。)

干杯

1 个答案:

答案 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

等文件来访问您的文件系统