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

15 security upload webserver chmod

对于我的Web应用程序,人们可以将图像从Web表单上传到我的Web服务器.

我应该为该图像上载目录设置CHMOD设置,以便人们可以将图像(从Web服务器)上载到该目录,但出于安全原因不能执行他们上载的任何文件.

chmod设置会是吗?:

chmod 744 directory/   
Run Code Online (Sandbox Code Playgroud)

Che*_*oft 22

在此上下文中,"可执行文件"有两种可能的含义,两者都是您需要配置的内容.

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

  2. Web服务器可以作为脚本读取和处理的文件.

处理二进制可执行文件

要在un*x系统上配置案例1,您需要确保上载目录及其中的文件归Web服务器用户所有,并且只能由该用户读取.该目录必须是可执行的; 这意味着可以访问该目录中的文件).如果Web用户需要列出目录中的文件,那么它也必须是可读的.当然,它也必须是可写的,以允许创建新文件.

因此,你想要的八进制集

chown <web-server-user> <upload-dir>
chmod 0700 <upload-dir>
Run Code Online (Sandbox Code Playgroud)

这些文件不能是可执行文件,只能由Web服务器读写,因此这些文件应该是可读写的

chmod 0600 <uploaded-file>
Run Code Online (Sandbox Code Playgroud)

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

chmod 0755 <upload-dir>
chmod 0644 <uploaded-file>
Run Code Online (Sandbox Code Playgroud)

处理Web服务器可删除

针对案例2的编码是特定于Web服务器的.

一种选择是将上传目录放在webroot之外,完全放弃对上载文件的直接URL访问,并且仅通过服务器端代码提供它们.您的代码读取并回显文件内容,从而确保Web服务器永远不会将其作为脚本处理

另一个选项是将Web服务器配置为不允许脚本处理上载目录中的文件.此配置特定于Web服务器.但是,例如,在Apache中,您可以通过输入服务器配置来实现此目的:

<Directory "path-to-upload-dir">
  AllowOverride None
  Options -ExecCGI
</Directory>
Run Code Online (Sandbox Code Playgroud)

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


bdo*_*lan 0

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

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