【问题标题】:ASP.NET Web.config questionASP.NET Web.config 问题
【发布时间】:2009-08-14 16:19:11
【问题描述】:

服务器是 IIS7。

有没有办法禁用子文件夹中的 web.config 文件?

我问是因为,我在网络服务器上有一个用于上传的文件夹。当有人上传文件时,会为用户的会话创建一个新文件夹,他们上传的文件会放在该文件夹中。

所以上传的路径是这样的: ~/uploads/3F2504E0-4F89-11D3-9A0C-0305E82C3301/somefile.txt

在 ~/uploads/ 目录中有一个 web.config 文件,它删除了除静态文件处理程序之外的所有 http 处理程序并添加了通配符 mime 类型。因此,用户上传的每个文件都只会被静态地提供。

如果用户上传 web.config 文件,我想禁止应用该文件中的任何设置。

我该怎么做?

编辑

我能否将上传文件夹设为应用程序池的成员,该应用程序配置为以经典模式而不是集成管道模式运行?这样它甚至不会关心 web.config 文件。

编辑 2

我可以安装另一种类型的网络服务器来静态提供所有文件吗?我可以通过不同的端口访问文件。是否有一些软件我可以确定不会运行任何脚本并且是安全的。

【问题讨论】:

    标签: asp.net iis-7 web-config


    【解决方案1】:

    我根本不允许他们上传具有该名称的文件。事实上,我通常不会相信用户给我的任何文件名......这很适合进行注入式攻击。

    【讨论】:

    • +1 用于重命名文件。如果您想“记住”原始文件名,请将其存储在其他地方。
    • 我已经想到了。这没有回答我的问题。
    【解决方案2】:

    好吧,我对此有不同的看法......

    如果您的上传文件夹不是网站的一部分,而是文件系统的一部分,该怎么办?这样 ASP.NET 不会处理对文件夹的请求,因此 ASP.NET 运行时不会加载 web.config。

    您必须为您的应用程序池的帐户授予对存储这些文件的文件系统的读/写访问权限,但我认为它更适合您想要完成的任务。

    【讨论】:

    • 但是,我需要提供文件夹中的文件。我考虑过没有 ASP.net 服务请求(请参阅我的编辑)
    • 您必须为您的应用程序添加从文件系统获取文件并将其流式传输给用户的功能。您可以将文件从文件系统复制到用户的“暂存”区域,但随后您将面临与最初相同的注入式攻击。
    • 我也想过这个问题。但我只是想让 IIS 来做这件事。
    • 让 IIS 这样做的问题在于,您可能会成为任意数量的注入攻击的人质,无论是 ASP.NET 还是经典 ASP 或(插入执行框架),除非我误解了您的编辑。
    • 如果没有 HTTP 处理程序,代码如何执行?每个请求都将映射到静态文件处理程序。
    【解决方案3】:

    显然它可以在代码中完成。

    如果文件夹始终存在,您可以使用没有(重要)内容和 ACL 的 web.config 预填充以确保它不会被覆盖,但查看路径我怀疑您动态创建上传文件夹表示这行不通。

    【讨论】:

      【解决方案4】:

      我不相信有办法告诉 IIS 不要使用 web.config(但我可能是错的)。就个人而言,我会在我的保存代码中添加一个检查并重命名文件。

      【讨论】:

        【解决方案5】:

        为什么不先检查文件名以防止用户上传名为 web.config 的文件?在允许上传之前,您可能还需要检查其他内容 - 文件太大等。

        【讨论】:

        • 我已经想到了。这没有回答我的问题。
        猜你喜欢
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 2010-10-18
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        相关资源
        最近更新 更多