2014-04-21 91 views
0

在IIS中,我注意到我可以拒絕訪問服務器上的任何文件擴展名。例如,我拒絕訪問.jpg圖像。但是,然後瀏覽器將無法在我的網站上顯示.jpg圖像。拒絕IIS中的文件擴展名

我想知道,IIS是否允許我們拒絕直接訪問文件擴展名或文件名(通過在地址欄中輸入完整的url),同時仍然向瀏覽器提供它們該文件?

+1

我不認爲Web服務器可以真正知道他們是否被文檔或直接請求。 HTTP請求看起來一樣。 –

回答

3

你不能真的阻止這樣做;確定的人可以下載網頁可以下載的任何內容。但是,通過檢查請求中的HTTP引用來源,您可以使技術性較差的文檔稍微難一些。如果它是您的其中一個網頁的網址,則可以允許該請求。否則,你可以否認它。這種技術常常用於防止深度鏈接。

這裏是你如何能做到這與.NET HTTP模塊的樣品(未經測試):

public class ImageDenyingModule : IHttpModule 
{ 
    public void Init(HttpApplication app) 
    { 
     app.BeginRequest += (s, e) => { 
      var request = app.Context.Request; 
      if (RequiresPageReferrer(request.Url) && !IsValidReferer(request.UrlReferrer)) { 
       app.Context.Response.StatusCode = 404; 
       app.Context.Response.End(); // Or something... 
      } 
     }; 
    } 

    private bool RequiresPageReferrer(string url) { 
    } 

    private bool IsValidReferrer(string referrer) { 
    } 
}