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

awe*_*awe 3 asp.net iis-7 web-config

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

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

<system.web>
    <httpHandlers>
        <add verb="*" path="*.txt" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
</system.web>
Run Code Online (Sandbox Code Playgroud)

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

我在文档中注意到了(添加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中指定了哪里?

Ahm*_*eed 9

请查看此MS支持文章,了解如何实现此目的:如何:使用ASP.NET保护文件类型.

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

<system.web>
    <httpHandlers>
        <add verb="*" path="*.ini" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
</system.web>
Run Code Online (Sandbox Code Playgroud)

根据httpHandlers Element页面,从.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>
Run Code Online (Sandbox Code Playgroud)


awe*_*awe 6

好的。我发现了问题所在。在.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>
Run Code Online (Sandbox Code Playgroud)

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

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

有关此问题的有用链接: