如何保护Web服务器的图像上传目录?

15
我网站的用户可以通过web表单将图片上传到我的服务器。那么,我应该如何设置这个图片上传目录的CHMOD权限,以便人们可以将图片上传到该目录(从Web服务器),但由于安全原因不允许执行上传的任何文件?这个chmod设置应该是什么?:
chmod 744 directory/   
2个回答

22

在这个上下文中,“可执行文件”有两种可能的含义,而且这两种都需要进行配置。

  1. 一个可通过在命令行中键入文件名来运行的可执行二进制文件

  2. 一个可以被网络服务器作为脚本读取和处理的文件

处理二进制可执行文件

要针对第一种情况在一个Unix系统上进行配置,您需要确保您的上传目录及其中的文件归Web服务器用户所有,并且只能由该用户读取。目录必须是可执行的;这意味着可以访问该目录中的文件。如果Web用户需要列出目录中的文件,则目录也必须是可读的。当然,它还必须是可写的,以允许创建新文件。

因此,您需要的八进制设置为

chown <web-server-user> <upload-dir>
chmod 0700 <upload-dir>

文件不得可执行,只能由Web服务器进行读取和写入,因此应该是:

chmod 0600 <uploaded-file>

请注意,这意味着只有Web服务器用户才能看到这些文件。这是最安全的情况。但是,如果您确实需要其他本地用户能够看到这些文件,则使用

chmod 0755 <upload-dir>
chmod 0644 <uploaded-file>

处理Web服务器可执行文件

针对第2种情况的编码是与Web服务器相关的。

一种选择是将上传目录放在Web根目录之外,完全禁止直接通过URL访问上传的文件,并仅通过服务器端代码来提供它们。你的代码读取和回显文件内容,从而确保它永远不会被Web服务器作为脚本处理。

另一种选择是配置Web服务器不允许处理上传目录中的文件作为脚本。这种配置是与Web服务器有关的。例如,在Apache中,您可以通过进入服务器配置来实现此目标:

<Directory "path-to-upload-dir">
  AllowOverride None
  Options -ExecCGI
</Directory>

设置 AllowOverride 为 None 很重要,因为它可以阻止任何人将 .htaccess 文件上传到您的上传目录并重新配置该目录的 Web 服务器权限。


这不是我的专业领域,但我认为php_admin_flag也可以添加到其中。 在Options行下面添加“php_admin_flag engine off”。 <Directory "path-to-upload-dir"> AllowOverride None Options -ExecCGI php_admin_flag engine off </Directory> - Jake

0

在目录上使用Chmod无法做到这一点,而且您的Web服务器可能会将.php解释为可执行文件,无论模式如何。您可能需要指定您正在使用的服务器,可能有一个.htaccess或类似的指令可以使用。

请注意,对目录的“执行”意味着“可以访问目录内的文件”,因此如果您希望Web服务器访问目录内的文件,则必须设置该权限...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接