【问题标题】:How do I secure a folder used to let users upload files?如何保护用于让用户上传文件的文件夹?
【发布时间】:2010-09-06 13:20:55
【问题描述】:

我的网络服务器中有一个文件夹,供用户使用 ASP 页面上传照片。

授予 IUSR 对文件夹的写入权限是否足够安全?我必须确保别的东西吗? 怕黑客绕过ASP页面,直接上传内容到文件夹中。

我在 Windows 2003 Server 上使用 ASP 经典和 IIS6。上传是通过 HTTP,而不是 FTP。

编辑:为了清楚起见更改问题并将我的答案更改为 cmets。

【问题讨论】:

    标签: security iis asp-classic iis-6 windows-server-2003


    【解决方案1】:

    用户将如何上传照片?如果您正在编写一个 ASP 页面来接受上传的文件,那么只有运行 IIS 的用户需要对该文件夹的写入权限,因为 IIS 将执行文件 I/O。您的 ASP 页面应检查文件大小并进行某种形式的身份验证,以防止黑客填满您的硬盘。

    如果您正在设置 FTP 服务器或其他文件传输方法,那么答案将取决于您选择的方法。

    【讨论】:

    • 是的,我正在使用 ASP 页面进行上传,但是...授予 IUSR 对文件夹的写入权限是否安全?如果黑客试图发布到同一个文件夹,IIS 也会被牵扯进来。
    • 这可能是最方便的方法。另一种解决方案是连接回服务器本身并通过 FTP 重新上传上传的文件,但这种麻烦的安全好处并不值得。
    【解决方案2】:

    您必须授予写入权限,但您可以检查文件的 mime 类型以确保图像。您可以这样使用 FSO:

    set fs=Server.CreateObject("Scripting.FileSystemObject")
    set f=fs.GetFile("upload.jpg")
    'image mime types or image/jpeg or image/gif, so just check to see if "image" is instr
    if instr(f.type, "image") = 0 then
       f.delete
    end if
    set f=nothing
    set fs=nothing
    

    此外,大多数上传 COM 对象都有一个类型属性,您可以在写入文件之前对其进行检查。

    【讨论】:

    • 你弄错了。我问的是绕过 ASP 页面的黑客。
    • 您也不能保证 MIME 类型是正确的,因为这是由浏览器传递的(我记得)。应该通过 ImageMagik 之类的工具打开图像并检查是否可以正确读取尺寸。
    【解决方案3】:

    另外,我建议不要让用户上传到可从网络访问的文件夹中。即使是最好的 MIME 类型检测也可能会失败,并且您绝对不希望用户上传伪装成 jpeg 的可执行文件,以防 MIME 嗅探失败,但 IIS 中的那个可以正常工作。

    在 PHP 世界中情况更糟,因为攻击者可以上传恶意 PHP 脚本,然后通过网络服务器访问它。

    始终,始终将上传的文件存储在文档根目录之外的某个目录中,并通过一些执行额外清理的访问脚本访问它们(并且至少明确设置图像/任何 MIME 类型。

    【讨论】:

    • 我接受了答案,但我仍然不确定是否真的必须将文件放在文档根目录之外的目录中。我认为它会增加一些性能问题。
    • 如果您注意缓存是否正常工作,性能问题将可以忽略不计。我已经在这里的另一个问题中回答了如何做到这一点:beta.stackoverflow.com/questions/48555/…
    【解决方案4】:

    您最好的选择可能是使用上传组件(我使用过 ASPUpload),该组件允许您从网站无法访问的文件夹中上传/下载文件。

    您将获得一些身份验证挂钩,并且不必担心有人随便浏览文件夹并下载文件(或在您的情况下上传),因为文件只能通过组件获得。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      相关资源
      最近更新 更多