8

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

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

4

6 回答 6

12

在 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 管理器中进行更改以映射文件扩展名,如下所示

于 2012-09-26T13:34:27.750 回答
2

您可以尝试使用locationWeb.Config 中的节点

<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

于 2012-09-13T18:56:42.280 回答
2

为什么要将非 Web 服务的文件存储在通过 IIS 可用的文件夹中?我通常会做类似的事情:

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

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

于 2012-09-13T19:01:08.680 回答
1

如果您使用的是 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 返回码。

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

于 2012-09-13T20:38:46.647 回答
0

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

于 2012-09-13T18:56:29.113 回答
0

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

IIS 7.0 请求过滤和 URL 重写

于 2012-09-13T21:06:16.130 回答