2009-03-24 6 views
3

Ich habe eine sehr grundlegende asp.net-Anwendung, die auf einer Masterseite INIT-Ereignis beruht, um den Benutzer über ein Sitzungsobjekt zu überprüfen. Ja, ich weiß, das ist so suboptimal.Sichere ELMAH in asp.net-Anwendung, die Formularauthentifizierung nicht verwendet

Ich möchte ELMAH hinzufügen, kann aber keine Referenzen zum Sichern der Konsole finden, ohne die Formularauthentifizierung und die Einstellung web.config allow/deny zu verwenden.

Gibt es eine andere Möglichkeit, die elmah.axd-Datei zu sichern, die nicht auf Formularauthentifizierung angewiesen ist?

Antwort

3

Dieser Artikel beschreibt, wie der Elmah Fehlerbehandlung in einem anderen Event-Handler wickeln, die Zugriff auf den Sitzungszustand erlaubt:

http://groups.google.com/group/elmah/msg/a0aa776d348ba97e

In Global.asax, könnte man dann etwas wie folgt aus:

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) 
{ 
    // Get the filename being requested 
    string filename = Path.GetFileName(Request.Path).ToLower(); 

    // Verify that a user is logged in by checking the session 
    bool isValid = (HttpContext.Current.Session["User"] != null); 

    // Throw error if invalid 
    if (filename == "elmah.axd" && !isValid) 
     throw new SecurityException("Access to elmah.axd is denied"); 
} 

der Standard Elmah Handler nicht implementiert IRequiresSessionState oder IReadOnlySessionState, so dass Sie eine andere erstellen müssen Event-Handler zu wickeln, wie in der oben genannten Link beschrieben. Andernfalls können Sie nicht auf die Sitzung im Application_PreRequestHandlerExecute-Ereignis zugreifen.

1

Ich bin einer der Entwickler für ELMAH MySQL-Unterstützung. Die Optionen zum Zulassen/Verweigern sind nicht webformspezifisch. Sie können mit jedem Anbieter zusammenarbeiten.

  1. Um eine benutzerdefinierte zu implementieren, müssten Sie die IPrincipal Schnittstelle verwenden.
  2. Die Rollen von allow/deny Rollen werden aus dieser IsInRole Methode von IPrincipal gezogen.
  3. Bei der Request_Authentication in Ihrem global.asax oder Ihrem eigenen IHttpHandler müssten Sie das IPrincipal-Objekt erstellen und auf das Context.User-Objekt festlegen. Etwas wie folgt aus:

    private void Request_Authenticate (object sender, EventArgs e) { 
        // do checks and create IPrincipal object 
        IPrincipal user = new MyPrincipal(...); 
        Context.User = user; 
    } 
    
  4. Dann, wenn die Rollen für Ihre elmah.axd Handler überprüft werden, es gegen dieses benutzerdefinierte Objekt gehen würde anstelle der Web-Formulare.

Verwandte Themen