上传文件的所有权/权限

我想知道我是否在正确的轨道上。

我的上传脚本,执行以下操作:

  • 检查扩展名是gif,png,jpg org jpeg
  • 检查MIME是图像/ JPEG,图像/ PNG,图像/ GIF
  • 检查是否上传了有效的文件
  • 上传文件到/图像
  • 禁用脚本执行的/ images中的.htaccess脚本

之后,我为/图像设置了以下权限

  • 所有者/组= www-data
  • 权限= 700

题:

  • 在/图像上设置权限的最后一步是否合理?

这是电子商务解决scheme的一部分。 在产品,产品列表等上面显示上传的图像。这意味着访问者应该允许查看图像。

我在用户www-data下运行apache 2.2

您的设置将阻止本地系统上的其他任何用户(除了root用户)对这些文件执行任何操作。 这足够了,只要没有其他服务在不同的权限下运行就需要访问。 这取决于您计划在图片上传后如何处理这些图片。

但是,这不会阻止访问该站点的人上传文件。 apache服务以www-data方式运行,所以由apache写入磁盘的任何文件都将由该用户拥有。

如果黑客以某种方式绕过你的保护措施,并获得上传者的访问权限,他们将能够上传文件。 底层文件系统无法知道文件是否来自授权的http用户。

编辑

如果我正确地理解了你的话,你主要担心的是有人会妥协你的上传脚本,上传一个新的脚本文件并通过你的主站点访问它来执行。

在包含上传文件的区域设置最低限度的必要权限是一个好主意。 我假设您的networking应用程序也将作为www-data运行,因此它将能够向最终用户显示图像。

但是,应该清楚,以您所期望的方式阻止脚本执行不是文件系统的工作。 执行位是不相关的,重点应该是确保你的应用程序是安全的,以及采取你已经列出的Apacheconfiguration措施。

不,您不需要设置它们,除非“上传脚本”使用缺省权限写入文件,这些文件不能被www-data用户读取,或者文件被显式地写入到执行位为'executable'的目录启用。

这没有任何意义,您的无特权的web服务器用户标识不应该拥有它提供的任何内容,也不应该写入它所服务的任何文件,而这些文件是您明确做的。