2014-01-30 43 views
5

我有一個在asp.net中編寫的應用程序,我有一些傳統的經典asp頁面集成到網站中。該網站使用Windows身份驗證。由於我無法管理包含角色的.asp頁面,因此我編寫了一個自定義HttpModule來檢查用戶是否有權查看這些頁面,否則它會重定向到「拒絕訪問」頁面。主要問題是應用程序需要在IIS7上以「經典模式」運行。我的模塊工作在集成模式,但不是在經典模式。此代碼是否有任何理由不適用於經典模式?提前致謝。自定義HttpModule集成在IIS7中,但不是經典模式

下面是模塊的代碼,這是很簡單的:

public class MyModule: IHttpModule 
{ 
    public void Init(HttpApplication application) 
    { 
     application.PostAuthenticateRequest += new EventHandler(Application_PostAuthenticateRequest); 
    } 
    void Application_PostAuthenticateRequest(object source, EventArgs e) 
    { 
     HttpApplication app = (HttpApplication)source; 
     HttpContext context = ((HttpApplication)source).Context; 

     if (context.Request.RawUrl.Contains("/protected-subfolder/")) 
     { 
      // gets user from windows authentication 
      string currentUser = Convert.ToString(context.User.Identity.Name); 

      if (!isAdmin(currentUser)) 
      { 
       //deny access 
       (context.Response).Redirect(VirtualPathUtility.ToAbsolute("~/AccessDenied.aspx")); 
      } 
     } 
    } 

public void Dispose(){ } 

下面是在web.config中的經典模式(不工作)的設置:

<configuration> 
    <system.web> 
     <httpModules> 
      <add name="MyModule" type="MyModule" /> 
     </httpModules> 
    </system.web> 
</configuration> 

而設置的集成模式(工作):

<configuration> 
    <system.webServer> 
     <modules> 
      <add name="MyModule" type="MyModule"/> 
     </modules> 
     <validation validateIntegratedModeConfiguration="false" /> 
    </system.webServer> 
</configuration> 
+0

啓用失敗的請求追蹤,您可以更好地瞭解什麼是攻擊。請參閱http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis – x0n

+0

我確實已啓用失敗請求跟蹤 - 問題在於請求不會失敗,但讓用戶直接進入他/她不應該能夠訪問的頁面,這似乎意味着httpmodule根本沒有運行。 – lem

+0

當你像這樣添加一個httpModule時,它也是最後一個要執行的模塊。這可能是一個問題。您可以查看系統範圍web.config中的繼承模塊,然後在您的配置文件中輸入,確保您的列表中的第一個,然後添加從系統web.config收集的模塊。 – x0n

回答

2

在集成模式下,IIS應用程序池允許使用任何請求URL進入ASP.NET ISAPI,但是,在經典模式下,您需要第三方ISAPI,否則請求將直接發送到頁面。

在集成模塊中,模塊在實際請求內容之前被首先檢查。

SO:

  1. 集成模式:http://www.yoursite.com/myfile.html首先通過在HTTP模塊和global.asax中配置了HTTP模塊和路線(您的Request.Url應具有上面的URL)

  2. 經典模式:http://www.yoursite.com/myfile.html檢查是否實際上有一個名爲myfile.html的文件,如果沒有,則進入404頁面。除非你有一個自定義的URLRewrite模塊。

希望這有助於你。

相關問題