【问题标题】:How to edit web.config to stop serving a specific file type of a .NET web app如何编辑 web.config 以停止提供 .NET Web 应用程序的特定文件类型
【发布时间】:2012-09-13 18:54:43
【问题描述】:

我想阻止用户通过浏览器访问特定类型的文件。例如,IIS 服务器默认阻止对 .config 和 .vb 文件的访问,给出错误消息“您请求的页面类型未提供,因为它已被明确禁止”,我想添加其他文件类型到这种行为。

有什么我可以添加到应用程序的 web.config 文件中的吗?我宁愿不通过使用<authorization> 元素阻止目录访问来处理它。

【问题讨论】:

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


    【解决方案1】:

    在 IIS 7+ 中,可以在应用程序级别完成请求过滤。在 web.config 中添加以下代码:

    <system.webServer>
        <security>
            <requestFiltering>
                <fileExtensions>
                    <add fileExtension=".vbs" allowed="false" />
                </fileExtensions>
            </requestFiltering>
        </security>
    </system.webServer>
    

    对于 IIS 6,上述方法不起作用,但您可以模仿 .cs 文件等页面存在的默认阻止行为,尽管您可能必须在服务器端进行更改。首先,将以下内容添加到您应用的 web.config 中:

    <system.web>
        <httpHandlers>
            <add path="*.vbs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
        </httpHandlers>
    </system.web>
    

    如果 asp.net 设置为处理该文件类型,例如 .cs,那么您就完成了。但是,如果您要阻止的文件类型由 IIS 处理,而不是 asp.net(如 .vbs),这还不够。您必须在 IIS 管理器中进行更改以映射文件扩展名,如 here 所示。

    【讨论】:

    • 这太好了,谢谢。但是,您将如何指定哪个目录?我不知道如何将文件路径添加到我想要保护的文件夹中。
    • 请注意文档声明可能必须首先在服务器上安装请求过滤角色服务,如此处所述iis.net/configreference/system.webserver/security/…。它是默认安装的。
    【解决方案2】:

    为什么要将非网络服务文件存储在通过 IIS 可用的文件夹中?我通常会这样做:

    \www.mywebsite.com\wwwroot\
    \www.mywebsite.com\secureimages\
    \www.mywebsite.com\virutaldirectories\
    

    在 IIS 中,我的 wwwroot 是我网站的根目录,而我的 MVC 应用程序是来自secureimages 目录的服务图像,通过This.File 提供,因此除非我以编程方式允许,否则图像不可用。我假设您的程序也在提供文件,如果是这样,这些文件不需要以任何方式提供给 IIS 直接作为文件提供服务。

    【讨论】:

    • 我认为没有办法通过 web.config 阻止文件类型,所以我认为这是最好的答案,因为它在应用程序级别 - 谢谢。
    • 我通过 web.config 找到了几种方法,所以我更新了接受的答案。
    • 在某些情况下这是不可能的。就像黑客使用 php 漏洞将文件放在不属于它们的位置一样。 (grrrrr) 像这样限制文件类型是很好的冗余。
    【解决方案3】:

    您可以尝试在 Web.Config 中使用location 节点

    <location path=".">
            <system.web>
                <authorization>
                    <!-- Order and case are important below -->
                    <allow roles="Admin"/>
                    <deny users="*"/>
                </authorization>
            </system.web>
        </location>
    

    使用路径"." 将应用于当前文件夹和所有嵌套文件夹。可以提供更具体的路径。您还可以在文件夹层次结构中嵌套 web.configs,以便轻松地使一个文件夹或多或少地获得许可。

    链接:http://msdn.microsoft.com/fr-fr/library/b6x6shw7.aspx

    【讨论】:

    • 谢谢 - 我知道这可行,但我希望阻止文件类型,而不是目录或文件名。
    • 在服务器上添加可能不在项目中的附加 web.config 非常有用,可确保代码部署无法更改服务器安全配置。
    【解决方案4】:

    如果您使用的是 IIS 7,则可以在 ApplicationHost.config 级别。

    http://www.iis.net/learn/get-started/planning-your-iis-architecture/introduction-to-applicationhostconfig

    请求过滤部分: http://www.iis.net/configreference/system.webserver/security/requestfiltering

    文件将显示为 404 返回码。

    *注意:由于此配置位于根级别,因此更改适用于该服务器上运行的所有应用程序。

    【讨论】:

    • 谢谢,但我正在寻找应用级别的东西。
    【解决方案5】:

    您必须设置 IIS 以通过 .NET 管道运行这些文件请求。一个更好的策略是一开始就阻止来自 IIS 的项目。这样一来,您就不必为了阻止文件而通过 .NET 管道运行 PDF 等开销。

    【讨论】:

      【解决方案6】:

      请求过滤应该这样做。它没有明确的扩展名。您可以在 URL 上使用正则表达式。

      IIS 7.0 Request Filtering and URL Rewriting

      【讨论】:

      • 谢谢,但我正在寻找应用级别的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 2015-02-26
      • 2012-10-01
      • 1970-01-01
      • 2013-08-05
      相关资源
      最近更新 更多