用户将图像上传到网站的权限和安全性


Permissions and security for users uploading images to website

我正在为我的社交网站开发一项功能,允许用户上传图片(以及稍后的视频),然后其他人可以查看。该代码目前将上传的图像从临时上传目录复制到web服务器文档根目录下的/media/目录中,并为其生成一个名称(我们不使用原始文件名)。图像也存储在mongo gridfs中。当收到对图像文件的请求时,我会使用htaccess来查看该文件是否存在——如果不存在,则URL会重写为PHP程序,该程序会从mongo中检索图像,将其写入/media/下的文件名并重定向。

我的问题是关于/media目录的安全性和相关目录权限。/media/目录上的权限是这样的,即它必须可以由www数据写入。有没有一种方法可以实现与我目前所拥有的效果相同的效果,而不需要在我的文档根目录下有一个世界可写目录?我在SO上读过很多关于这类问题的帖子,这些帖子似乎说了不同的(尽管通常没有冲突),我希望能很好地总结出我应该注意的要点。

如果您只需要PHP脚本将文件上传到此文件夹(并更改其内容),则需要让用户Apache作为目录的所有者运行。

要查找Apache运行的用户,请使用:

ps aux | grep apache

在SSH命令行上。然后找出Apache所属的用户组。正如你所说,它通常总是www-data,但你可以反复检查以确定。一旦你知道了,将这个组设置为你的目录的所有者:

chgrp -R www-data /path/to/directory

我发现这两个链接非常有用:
http://www.mysql-apache-php.com/fileupload-security.htm
http://www.acunetix.com/websitesecurity/upload-forms-threat.htm