15 security upload webserver chmod
对于我的Web应用程序,人们可以将图像从Web表单上传到我的Web服务器.
我应该为该图像上载目录设置CHMOD设置,以便人们可以将图像(从Web服务器)上载到该目录,但出于安全原因不能执行他们上载的任何文件.
chmod设置会是吗?:
chmod 744 directory/
Run Code Online (Sandbox Code Playgroud)
Che*_*oft 22
在此上下文中,"可执行文件"有两种可能的含义,两者都是您需要配置的内容.
一个可执行的二进制文件,可以通过在shell中键入文件名从命令行运行
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服务器权限.
对目录进行 Chmod 无法做到这一点,而且无论模式是什么,您的 Web 服务器都可能将 .php 解释为可执行文件。您可能想要指定您正在使用的服务器,可能有一个 .htaccess 或类似的指令可以使用。
请注意,目录上的“执行”意味着“可以访问目录内的文件”,因此如果您希望 Web 服务器能够访问目录内的文件,则必须进行设置...