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

时间:2009-05-06 05:37:40

标签: security upload webserver chmod

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

我应该为该图片上传目录设置CHMOD设置,以便人们可以将图片(从网络服务器)上传到该目录,但出于安全原因不会执行他们上传的任何文件。

chmod设置会是吗? :

chmod 744 directory/   

2 个答案:

答案 0 :(得分:22)

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

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

  2. 可能读取并由网络服务器作为脚本处理的文件。

  3. 处理二元可执行文件

    要在un * x系统上配置案例1,您需要确保上载目录及其中的文件归Web服务器用户所有,并且只能由该用户读取。该目录必须是可执行的;这意味着可以访问该目录中的文件)。如果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服务器配置为不允许脚本处理上载目录中的文件。此配置特定于Web服务器。但是,例如,在Apache中,您可以通过输入服务器配置来实现此目的:

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

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

答案 1 :(得分:0)

目录上的Chmod无法执行此操作,而且无论模式是什么,您的Web服务器都可能将.php解释为可执行文件。你可能想要指定你正在使用的服务器,你可以使用.htaccess或类似的指令。

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