【发布时间】:2010-10-24 02:41:25
【问题描述】:
对于我的网络应用程序,人们可以将图像从网络表单上传到我的网络服务器。
我应该为该图像上传目录设置 CHMOD 设置,以便人们可以将图像(从网络服务器)上传到该目录,但出于安全原因不能执行他们上传的任何文件。
chmod 设置会是什么? :
chmod 744 directory/
【问题讨论】:
标签: security upload webserver chmod
对于我的网络应用程序,人们可以将图像从网络表单上传到我的网络服务器。
我应该为该图像上传目录设置 CHMOD 设置,以便人们可以将图像(从网络服务器)上传到该目录,但出于安全原因不能执行他们上传的任何文件。
chmod 设置会是什么? :
chmod 744 directory/
【问题讨论】:
标签: security upload webserver chmod
在这种情况下,“可执行文件”有两种可能的含义,并且都是您需要配置的东西。
一个可执行的二进制文件,可以通过在 shell 中键入文件名从命令行运行
一个可以被读取并被网络服务器作为脚本处理的文件。
处理二进制可执行文件
要在 un*x 系统上针对案例 1 进行配置,您需要确保您的上传目录和其中的文件归 Web 服务器用户所有,并且只能由该用户读取。该目录必须是可执行的;这意味着可以访问该目录中的文件)。如果网络用户需要列出目录中的文件,它也必须是可读的。当然,它也必须是可写的以允许创建新文件。
因此你想要的八进制集是
chown <web-server-user> <upload-dir>
chmod 0700 <upload-dir>
文件不能是可执行的,只能被web服务器读写,所以这些应该是
chmod 0600 <uploaded-file>
请注意,这意味着只有网络服务器用户才能看到这些文件。这是最安全的情况。但是,如果您确实需要其他本地用户能够看到这些文件,那么请使用
chmod 0755 <upload-dir>
chmod 0644 <uploaded-file>
处理网络服务器可执行文件
针对案例 2 的编码是特定于 Web 服务器的。
一种选择是将上传目录放在 webroot 之外,完全禁止对上传文件的直接 URL 访问,并且只能通过服务器端代码提供这些文件。您的代码读取并回显文件内容,从而确保它永远不会被 Web 服务器作为脚本处理
另一个选项是将您的网络服务器配置为不允许对上传目录中的文件进行脚本处理。此配置是特定于 Web 服务器的。但是,例如,在 Apache 中,您可以通过输入服务器配置来实现此目的:
<Directory "path-to-upload-dir">
AllowOverride None
Options -ExecCGI
</Directory>
AllowOverride None 很重要,因为它会阻止任何人将 .htaccess 文件上传到您的上传目录并重新配置该目录的 Web 服务器权限。
【讨论】:
目录上的 Chmod 无法做到这一点,而且无论模式是什么,您的 Web 服务器都可能将 .php 解释为可执行文件。您可能需要指定您使用的服务器,可能有一个 .htaccess 或类似的指令可以使用。
请注意,在目录上“执行”意味着“可以访问目录中的文件”,因此如果您希望您的 Web 服务器可以访问其中的文件,则必须进行设置...
【讨论】: