我們使用我們網站上的特定部分目錄瀏覽,但我們的用戶真的不喜歡默認的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 */
}
我以爲是這樣。如果找到默認頁面或特定文件,您對我可以檢查的內容是否有任何輸入來告訴我的模塊停止處理?例如,我知道我可以在技術上使用URL來查看是否存在特定的**文件,但是尋找通用文件夾(基於url)會有問題,因爲IIS會尋找default.aspx頁面。 也許看看是否存在確切的文件,如果沒有擴展查找default.aspx,然後決定是否繼續進行目錄瀏覽? – Jeremy 2013-02-15 17:33:00
@Jeremy,我不認爲任何人都可以幫你什麼條件*您要檢查*在這種情況下 - 你需要決定你想要什麼和更新問題(或可能會要求獨立的),如果你有麻煩獲得您需要的信息。附註:目錄瀏覽是潛在的安全噩夢,所以請確保至少簡要考慮啓用/重新實現它的安全含義。 – 2013-02-15 17:55:00
感謝您的意見。我將不得不考慮如何限制其完整處理。我們已經明確考慮了使用目錄瀏覽的含義。也許我會考慮替代方案,或者如果我找不到這些信息,請另外提出一個問題。 – Jeremy 2013-02-15 18:02:28