2012-03-28 43 views
0

Ich habe eine Website, die viele asp.net-Anwendungen hostet. Einige davon sind in MVC2 geschrieben, einige sind in MVC3 geschrieben, einige sind nicht im Haus geschrieben und binär implementiert (obwohl wir Quellcode finden können) und viele, viele mehr sind in ASP.Net 2.0 Webforms geschrieben. Auf all diesen Seiten verwenden wir eine einzige Anmeldeseite aus einer Login-Anwendung. Wir können dies tun, weil fast alle in Anwendungen:Benutzerdefinierte FormsAuthenticationTicket Validierung

  1. gleichen Anwendungspool
  2. Die gleiche Maschine Schlüssel
  3. Das gleiche Login Cookie-Name

Mein Problem ist, dass sie auch das Sicherheitsproblem teilen, kein Cookie-Spoofing-Schutz. Mein Plan ist es, einige zusätzliche Informationen (erste 2 Bytes von ip, user agent) dem Login-Cookie hinzuzufügen (möglicherweise im Feld useradata) und dies dann bei jeder Anfrage zu verifizieren, bevor der Cookie akzeptiert wird.

Meine Frage ist, wo asp.net das Formularauthentifizierungsticket prüft und den Benutzer lädt und kann ich überschreiben, um ein paar zusätzliche Dinge zu überprüfen, bevor Sie das Login verwenden.

Es wäre ein Plus, wenn ich diesen Code nicht jedem global.cs hinzufügen und in eine DLL schreiben und auf diese DLL in der Konfigurationsdatei verweisen könnte.

+0

Auf einer Unternote eine benutzerdefinierte SessionIDManager ich hinzugefügt, um zu sehen, ob das helfen würde, aber das nur mit meinem sessionID nicht die Anmeldungs ​​Cookie geholfen. – Jeff

+0

Können Sie das Application_AuthenticateRequest-Ereignis in Global.asax verwenden - einige relevante Kommentare können hier sein: http://StackOverflow.com/Questions/875472/AuthenticaterEquest-Event – SilverlightFox

+1

Der Grund, asp.net keine IP-Überprüfung auf Cookies ist, weil es ist eine sehr dumme Idee. Es gibt viel zu viele Bedingungen, unter denen sich die IP-Adresse des Benutzers ändert, z. B. bei der Verwendung mobiler Geräte (dies kann sich von Minute zu Minute ändern) oder wenn die dynamische IP-Adresse eines Benutzers geändert wird oder geteilte Proxys gepoolt werden. Außerdem verhindert dies nicht, dass jemand den Cookie von einem Computer hinter einer Firewall auf einen anderen Computer hinter derselben Firewall kopiert. Sie versuchen, eine unwahrscheinliche Sicherheitsanfälligkeit zu beheben, indem Sie die Verwendbarkeit der Website durch die Benutzer unterbrechen, und es funktioniert nicht einmal richtig! –

Antwort

0

Sie können die Authentifizierung nicht überschreiben, außer indem Sie ein neues FormsAuthenticationModule schreiben, aber es gibt einen einfacheren Weg. während die ASP.NET-Pipeline-Verarbeitung Anforderungen, bei jedem Schritt ein Ereignis ausgelöst wird, können Sie hier auf die ASP.NET-Pipeline tippen und Ihre Arbeit machen.

ASP.NET pipeline Authentication & Authorization steps

In Ihrem Fall können Sie Ihre Cookie in PostAuthenticateRequestHandler Ereignishandler validieren.

HttpCookie authCookie = Context.Request.Cookies["YourFormsCookieName"]; 
if (IsValidAuthCookie(authCookie)) 
{ 
    // do some stuff 
} 
else 
{ 
    // expire cookie using FormsAuthentication.Signout() 
    // do some stuff 
} 

dies ist ein nützlicher Link: Forms Authentication

Verwandte Themen