2009-09-01 24 views
3

我想限制我的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
微軟的Visual Studio 2003或Visual Studio 2005

...這表明這不是在.NET 3和IIS7支持.. 。

這是在IIS7中指定的位置?

回答

8

看看這篇關於如何實現這一點的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,* .dsd通用汽車公司,* .ssdgm,* .lsad,* .ssmap,* .CD,* .dsprototype,* .lsaprototype,* .sdm,* .sdmDocument,*密度纖維板,* .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

我正在尋找這樣的東西,但它不起作用**:(**。我改變了我的問題以包括您的答案,因爲這也不起作用,但它正是我想要的工作......難道是IIS7不尊重這個嗎?是否需要在IIS7中設置一些設置才能工作?我的應用程序是.NET 3.5。 – awe 2009-09-02 08:24:27

2

這是您在IIS中設置的內容,但它應該在默認情況下已存在。

+0

你是對的。 ini文件已經受到限制。我只是選擇了一個例子,但對原理更感興趣,並且如果可以在應用程序的web.config中執行此操作。 – awe 2009-09-02 07:16:10

+0

你可以指出在IIS7配置中這個可以改變/添加新的等..? – awe 2009-09-02 08:40:03

+1

我建議使用上面提供的答案,因爲這是特定於應用程序的。在IIS中,您只需提取MIME類型,但是在該計算機上運行的任何網站中,該文件類型不會在整個Web服務器上被識別。 – Colin 2009-09-02 09:03:46

0

你可以改變它們到.config嗎?或.aspx?

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> 

雖然這是沒有的伎倆我的回答,我也標誌着從艾哈邁德Mageed答案的答案,因爲他在我的問題中添加了.NET 3的版本信息之前提供了它。他還指出我找到解決方案的正確方向。請注意,他的答案對於.NET之前的所有版本都是正確的3.

編輯: IIS 7.0支持2種模式,集成和經典。 Integrated是IIS 7.0上ASP.NET應用程序的默認模式,它要求將處理程序放置在<system.webServer>/<handlers>而不是<system.web>/<httpHandlers>(這是經典模式和以前的IIS版本支持的)。

有關此問題的幫助鏈接:

+1

@awe:+1,感謝分享。 ://msdn.microsoft.com/en-us/library/46c5ddfy.aspx - 「對於IIS 6.0,通過使用Web.config文件的httpHandlers部分註冊處理程序。對於在Classic模式下運行的IIS 7.0,您註冊在httpHandlers部分中的處理程序,並將處理程序映射到Aspnet_isapi.dll文件。對於以集成模式運行的IIS 7.0,請使用system.WebServer部分中的處理程序元素註冊處理程序。默認運行在集成模式下 – 2009-09-02 15:01:45

+0

非常感謝您爲此添加更多信息。 – awe 2009-09-03 07:08:16