如何限制指定文件类型的下载

时间:2009-09-01 14:49:45

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

我想限制我的网络应用,以便无法下载/显示.txt文件。 这是我可以在我的web.config文件中设置的吗?

我在配置文件中尝试了这个:

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

......但它没有效果。我使用的是IIS7,应用程序是.NET3.5,这可能与它有关吗?我知道这实际上适用于.NEt 1.0 1.1和2.0。

我在文档中注意到了这个(add httpHandlers),要求部分:

  

Microsoft Internet信息服务(IIS)版本5.0,5.1或6.0   .NET Framework 1.0,1.1或2.0版   Microsoft Visual Studio 2003或Visual Studio 2005

...表示在.NET 3和IIS7中不支持...

IIS7中指定了哪个位置?

4 个答案:

答案 0 :(得分:9)

请参阅此MS支持文章,了解如何实现此目标:HOW TO: Use ASP.NET to Protect File Types

它涉及设置IIS以将这些请求转发到ASP.NET,然后设置web.config以阻止所需的文件类型,例如:(这适用于您的开发机器,在IIS7之前 - 请务必查看下文)

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

根据httpHandlers Element page,从.NET 2.0开始默认禁止以下扩展名(.ini不是其中之一):

* .asax,* .ascx,*。master,* .skin,* .browser,*。sitemap,*。config,*。cs,* .csproj,* .vb,* .vbproj,* .webinfo ,* .licx,* .resx,* .resources,* .mdb,* .vjsproj,* .java,*。jsl,* .ldb,* .dsdgm,* .ssdgm,* .lsad,* .ssmap,* .cd,* .dsprototype,* .lsaprototype,* .sdm,* .sdmDocument,* .mdf,* .ldf

编辑:这适用于IIS 7.0之前的IIS版本。 IIS 7.0添加了一个额外的操作模式,称为集成模式(ASP.NET的默认模式),它要求将处理程序放在<system.webServer>/<handlers>而不是<system.web>/<httpHandlers>中。我在此页面上添加了一些更多的信息和链接到@ awe的答案,请查看更多详细信息。

重要!对于IIS 7.0或更高版本

如编辑中所指定,您需要将<add>元素放在不同的位置,规则也需要一个名称 - 如果您没有指定名称,您将获得500内部重新启动时出错

  <system.webServer>
        <handlers>
            <add name="IgnoreIni" verb="*" path="*.ini" type="System.Web.HttpForbiddenHandler" />
        </handlers>
    </system.webServer>

答案 1 :(得分:4)

行。我发现了问题。在 .NET 3 中,这在web.config文件的不同部分中指定。它不是<system.web><httpHandlers>,而是<system.webServer><handlers>,就像这样:

<system.webServer>
  <handlers>
    <add name="NoTxtAllowed" verb="*" path="*.txt" 
       type="System.Web.HttpForbiddenHandler" />
  </handlers>
</system.webServer>

虽然这是我的答案,但我已将 Ahmad Mageed 的答案标记为 的答案,因为他在我在我的问题中添加.NET 3的版本信息之前提供它。他还指出了找到解决方案的正确方向。请注意,他的答案对于3之前的所有.NET版本都是正确的。

编辑: IIS 7.0支持2种模式,即Integrated和Classic。集成是IIS 7.0上ASP.NET应用程序的默认模式,需要将处理程序放在<system.webServer>/<handlers>而不是<system.web>/<httpHandlers>中(经典模式和以前的IIS版本支持)。

有关此问题的有用链接:

答案 2 :(得分:2)

这是您在IIS中设置的内容,但默认情况下它应该存在。

答案 3 :(得分:0)

你能把它们改成.config吗?或.aspx?