【问题标题】:How to restrict download of specified file types如何限制指定文件类型的下载
【发布时间】:2009-09-01 14:49:45
【问题描述】:

我想限制我的网络应用程序,以便无法下载/显示 .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 中哪里指定的?

【问题讨论】:

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


    【解决方案1】:

    查看这篇关于如何实现此目的的 MS 支持文章:HOW TO: Use ASP.NET to Protect File Types

    它涉及设置 IIS 以将这些请求转发到 ASP.NET,然后设置您的 web.config 以阻止所需的文件类型,例如:(nb 这适用于您的开发机器和 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 的默认设置),它要求将处理程序放在&lt;system.webServer&gt;/&lt;handlers&gt; 而不是&lt;system.web&gt;/&lt;httpHandlers&gt;。我在此页面上添加了一些更多信息和指向@awe 答案的链接,请查看以获取更多详细信息。

    重要!适用于 IIS 7.0 或更高版本

    根据编辑中的规定,您需要将 &lt;add&gt; 元素放在不同的位置并且规则也需要名称 - 如果您不指定名称,您将在以下情况下收到 500 内部错误重启

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

    【讨论】:

    • 我一直在寻找类似的东西,但它不起作用 :( 。我已经更改了我的问题以包含您的答案,因为这也不起作用,但它这正是我想要工作的......难道是 IIS7 不尊重这一点?是否需要更改 IIS7 中的某些设置才能使其工作?我的应用程序是 .NET 3.5。
    【解决方案2】:

    好的。我发现了问题。在 .NET 3 中,这在 web.config 文件的不同部分中指定。不是&lt;system.web&gt;&lt;httpHandlers&gt;,而是&lt;system.webServer&gt;&lt;handlers&gt;,如下所示:

    <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 是 IIS 7.0 上 ASP.NET 应用程序的默认模式,它要求将处理程序放置在 &lt;system.webServer&gt;/&lt;handlers&gt; 而不是 &lt;system.web&gt;/&lt;httpHandlers&gt; 中(经典模式和之前的 IIS 版本都支持此模式)。

    有关此问题的有用链接:

    【讨论】:

    • @awe:+1,感谢分享。根据msdn.microsoft.com/en-us/library/46c5ddfy.aspx 的更多信息-“对于 IIS 6.0,您可以使用 Web.config 文件的 httpHandlers 部分注册处理程序。对于在经典模式下运行的 IIS 7.0,您在 httpHandlers 部分注册处理程序,然后映射处理程序到 Aspnet_isapi.dll 文件。对于在集成模式下运行的 IIS 7.0,您可以使用 system.WebServer 部分中的处理程序元素注册处理程序。 IIS 7.0 上的 ASP.NET 默认以集成模式运行。
    • 太棒了。感谢您添加有关此的更多信息。
    【解决方案3】:

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

    【讨论】:

    • 你是对的。 ini 文件已经受到限制。我只是选择一个例子,但对原理更感兴趣,如果可以在应用程序的 web.config 中执行此操作。
    • 你能指出在 IIS7 配置中的哪个位置可以更改/添加新的等等吗?
    • 我建议使用上面提供的答案,因为这是特定于应用程序的。在 IIS 中,您只需删除 MIME 类型,但该文件类型将不会再出现在整个 Web 服务器上,在该机器上运行的任何网站中。
    【解决方案4】:

    你能把这些改成 .config 吗?还是 .aspx?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      相关资源
      最近更新 更多