代码之家  ›  专栏  ›  技术社区  ›  awe

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

  •  3
  • awe  · 技术社区  · 15 年前

    我想限制我的Web应用程序,以便.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 回复  |  直到 10 年前
        1
  •  9
  •   wal    10 年前

    请看下面关于如何实现这一点的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不是其中之一):

    *.Master,*.CasPig,*.cPro,*.VBPROJ,*.LIX,*.RESX,*.RESX,*.MdB,*.jjsPRJ,*.jSL,*.LDB,*.dSDGM,*.SSDGM,*.LSAD,*.sSAMP,*.cd,*.DS原型,*.LSA原型,*.SDM,*.SDMCODE,*.MDF,*.LDF *.asax,*.ascx,

    编辑: 这适用于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>
    
        2
  •  4
  •   Ahmad Mageed    15 年前

    好啊。我发现了问题。在 .NET 3(网络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>
    

    虽然这是对我起作用的答案,但我已将答案标记为 艾哈迈德马格德 作为 这个 回答,因为他在我的问题中添加了.NET 3的版本信息之前提供了它。他还指出了我找到解决办法的正确方向。请注意,对于3之前的所有.NET版本,他的答案都是正确的。

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

    有关此问题的有用链接:

        3
  •  2
  •   Colin    15 年前

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

        4
  •  0
  •   Mark Redman    15 年前

    你能把这些改成.config吗?或者,ASPX?