2013-02-15 37 views
3

我們使用我們網站上的特定部分目錄瀏覽,但我們的用戶真的不喜歡默認的ASP.NET限制的HttpModule只處理特定請求

目錄瀏覽。說實話,我們並不特別關心它。

我碰到mvolo的自定義目錄瀏覽模塊和我試圖使用它。但是,我發現如果在根web.config中啓用它,它將允許在沒有默認頁面的情況下在所有文件夾上瀏覽目錄(如您所期望的那樣)。如果我在根中設置了enabled =「false」,它會拋出一個HttpException,它被我的通用錯誤頁面捕獲,但是每個請求都會導致異常,就像請求的頁面在加載過程中請求附加圖像時一樣。

正如我相信(我可能是錯的),默認的目錄瀏覽模塊只爲enabled屬性檢查,如果沒有默認的文件夾,你不要求特定的文件(例如,mysite.com/images /與mysite.com/images/logo.gif)。

我已經重建了自定義模塊的功能,但我無法弄清楚如何在啓用該模塊限制爲只在目錄瀏覽,有必要的情況下完全執行 - 而不是對每一個請求。下面是代碼的模塊塊:

public void Init(HttpApplication app) 
    { 
     app.PreRequestHandlerExecute += new EventHandler(this.OnPreRequestHandlerExecute); 
    } 

    public void OnPreRequestHandlerExecute(object source, EventArgs e) 
    { 
     HttpApplication application = (HttpApplication)source; 
     HttpContext context = application.Context; 
     config = (DirectoryListingConfigSection)WebConfigurationManager.GetSection("directoryBrowsing", context.Request.Path); 

     if (this.config == null) 
     { 
      throw new Exception("Missing <directoryBrowsing> configuration section."); 
     } 

     /* I only want to check this if it's necessary, not for things 
      like mysite.com/images/logo.gif or mysite.com/about/history.aspx 
      -- those shouldn't give a 403 error */ 
     if (!config.Enabled) 
     { 
      context.Response.Status = "403 Forbidden"; 
     } 

     /* The rest of the code goes below, and should only process 
      if Directory Browsing is necessary and enabled */ 
    } 

回答

2

模塊是executed on every request通過的ASP.Net去,有沒有辦法來限制通話基於類型的請求的模塊。

您需要內置檢查到你的模塊的代碼只處理那是該模塊的利益要求。

根據不同的階段,你應該對請求訪問的大部分信息。在PreRequestHandlerExecute期間,您有關於傳入請求的所有可能信息,包括Url,標題和相關會話狀態(如果存在)。

+0

我以爲是這樣。如果找到默認頁面或特定文件,您對我可以檢查的內容是否有任何輸入來告訴我的模塊停止處理?例如,我知道我可以在技術上使用URL來查看是否存在特定的**文件,但是尋找通用文件夾(基於url)會有問題,因爲IIS會尋找default.aspx頁面。 也許看看是否存在確切的文件,如果沒有擴展查找default.aspx,然後決定是否繼續進行目錄瀏覽? – Jeremy 2013-02-15 17:33:00

+0

@Jeremy,我不認爲任何人都可以幫你什麼條件*您要檢查*在這種情況下 - 你需要決定你想要什麼和更新問題(或可能會要求獨立的),如果你有麻煩獲得您需要的信息。附註:目錄瀏覽是潛在的安全噩夢,所以請確保至少簡要考慮啓用/重新實現它的安全含義。 – 2013-02-15 17:55:00

+0

感謝您的意見。我將不得不考慮如何限制其完整處理。我們已經明確考慮了使用目錄瀏覽的含義。也許我會考慮替代方案,或者如果我找不到這些信息,請另外提出一個問題。 – Jeremy 2013-02-15 18:02:28