我有一個在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>
啓用失敗的請求追蹤,您可以更好地瞭解什麼是攻擊。請參閱http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis – x0n
我確實已啓用失敗請求跟蹤 - 問題在於請求不會失敗,但讓用戶直接進入他/她不應該能夠訪問的頁面,這似乎意味着httpmodule根本沒有運行。 – lem
當你像這樣添加一個httpModule時,它也是最後一個要執行的模塊。這可能是一個問題。您可以查看系統範圍web.config中的繼承模塊,然後在您的配置文件中輸入 ,確保您的列表中的第一個,然後添加從系統web.config收集的模塊。 –
x0n