我想知道我是否走在正确的道路上。
我的上传脚本执行以下操作:
- 检查扩展名是否为 gif、png、jpg 或 jpeg
- 检查 mime 是否为 image/jpeg、image/png、image/gif
- 检查是否上传了有效文件
- 上传文件到/images
- /images 中的 .htaccess 脚本禁用脚本执行
之后我为/images设置了以下权限
- 所有者/群组 = www-data
- 权限 = 700
问题:
- 我设置 /images 权限的最后一步是否有意义?
这是电子商务解决方案的一部分。上传的图像将在产品、产品列表等上显示。这意味着访问者应该有权查看图像。
我在用户 www-data 下运行 apache 2.2
答案1
您的设置将阻止本地系统上的任何其他用户(root 除外)对这些文件执行任何操作。只要没有其他以不同权限运行的服务需要访问,这已经足够合理了。这取决于您计划在上传图像后如何处理它们。
然而,这将不是阻止有权访问该网站的人上传文件。apache 服务以 www-data 身份运行,因此 apache 写入磁盘的任何文件都将归该用户所有。
如果黑客以某种方式绕过您的保护措施并获得上传器的访问权限,他们将能够上传文件。底层文件系统无法知道文件是否来自授权的 http 用户。
编辑
如果我理解正确的话,您主要担心的是有人破坏了您的上传脚本,上传了新的脚本文件并通过您的主站点访问它来执行?
在包含上传文件的区域设置最低必要权限是一个好主意。我假设您的 Web 应用程序也将以 www-data 的形式运行,因此它将能够向您的最终用户显示图像。
但是,应该清楚的是,以您希望的方式阻止脚本执行不是文件系统的工作。执行位无关紧要,重点应该放在确保您的应用程序安全以及采取您列出的 Apache 配置措施上。
答案2
不,您不需要设置它们,除非“上传脚本”以 www-data 用户无法读取的默认权限写入文件,或者将文件明确写入启用了执行位的“可执行”目录。
答案3
这没有任何意义,您的非特权网络服务器用户 ID 不应拥有它所提供的任何内容,也不应能够写入它所提供的任何文件,而您明确地这样做了。