2009-04-23 6 views
6

Wir haben festgestellt, dass es möglich ist, eine Kopie eines ASP.NET FormsAuthentication Cookie auf einer anderen Maschine zu erstellen, die zweite Maschine ermöglicht, ohne in zu müssen zu authentifizieren loggt sein.Kann ich mein ASP.NET FormsAuthentication-Cookie sicherer machen, indem ich es mit der Sitzungs-ID verknüpfe?

Eine vorgeschlagene Lösung dieses Problems wurde die speichern Sitzungs-ID innerhalb FormsAuthenticationTicket.UserData und zu überprüfen, dass die beiden Werte innerhalb Application_AuthenticateRequest() übereinstimmen.

Wir verwenden:

FormsAuthenticationTicket.IsPersistent = false; 

Ist dieser Ansatz FormsAuthentication Cookie mit der Session-ID eine gute Idee, zu assoziieren?

+0

Ist das etwas, das Sie tatsächlich versucht haben? Sie haben tatsächlich eine andere Maschine mit einem Cookie von einer anderen Maschine angemeldet? Ich dachte, es gäbe eine Verschlüsselung pro Sitzung. –

+0

Ein Kollege hat es versucht. Ich weiß nicht, ob eine Verschlüsselung konfiguriert wurde. – tjrobinson

Antwort

18

Ich denke, dass Sie das Problem überdenken. Die Fähigkeit, einen Cookie zu kopieren, ist nur ein inhärentes Problem von Cookies - jeder kann jeden Cookie abfangen und die Daten, die sich dort befinden, imitieren, indem er sie auf einem anderen Rechner einrichtet.

Die "Sicherheit" des Authentifizierungscookies kommt von der Tatsache, dass niemand (angeblich) den Cookie von Hand herstellen kann, um einen authentifizierten Benutzer zu fälschen. Sobald der Cookie erstellt wurde, kann er natürlich zur Authentifizierung verwendet werden. Dies bedeutet, dass Sie, bevor Ihr "Problem" auftritt, immer noch einen gültigen Benutzer anmelden müssen. Wenn dieser Benutzer das System missbraucht, indem er sein Cookie auf andere Maschinen kopiert, um jedem Zugriff zu gewähren, ist es genau dasselbe, wenn der Benutzer jedem nur seinen Benutzernamen und sein Passwort mitteilt, außer viel stumpfer. Daher ist das Problem nicht das Kopieren des Cookies - es ist die Benutzerin selbst. Ein weiterer Angriffsvektor wäre, wenn das Netzwerk kompromittiert ist und jemand den Verkehr abfangen kann, um den Cookie über einen Sniffer oder was auch immer zusammenzufügen - aber wiederum ist dies bei Cookies selbst inhärent. Dies wird als Session-Hijacking bezeichnet, und die einzige Möglichkeit, dies zu verhindern, besteht darin, SSL für Ihre Site zu verwenden.

Wenn Sie sich wirklich Sorgen machen, würde ich einfach Ihre Authentifizierungs- und Sitzungszeitlimits einstellen und dann in Ihrer global.asax-Datei einfach FormsAuthentication.Signout() aufrufen, wenn die Benutzersitzung abläuft. Dadurch wird die Authentifizierung jedes Mal ungültig, wenn der Benutzer seine Sitzung beendet hat, sodass er sich später erneut anmelden muss. Natürlich könnte dies eine extreme Belästigung für Ihre Benutzer sein ...

Ich würde auch sehr empfehlen This MSDN article. Es beantwortet wahrscheinlich Ihre Fragen viel besser als ich kann.

+0

Vielen Dank für Ihre Antwort - es ist tatsächlich in der Richtung von dem, was ich dachte, aber wollte eine zweite Meinung, bevor ich versuchte, etwas zu beheben, das eigentlich kein Problem war. Ihr vorgeschlagenes FormsAuthentication.Signout() scheint in meinem Fall nicht anwendbar, da der Authentifizierungscookie am Ende der Sitzung sowieso abläuft - erzwingt Benutzer, sich bei jeder neuen Sitzung anzumelden. Oder habe ich etwas verpasst? – tjrobinson

+1

Was ist mit dem Fall, in dem ein Benutzercomputer mit einem Virus infiziert wird, der seinen Cookie stiehlt? SSL würde sie dann nicht schützen. Ich nehme an, dass es in diesem Fall nur eine Variation von Session Hijacking ist. – tjrobinson

+1

Re: erster Kommentar. Ich glaube nicht, dass du etwas verpasst hast. Ich habe letzte Nacht noch etwas darüber nachgedacht und dachte, dass Sie versuchen könnten, einige Benutzerdaten in das Authentifizierungsticket zu setzen, wie ihre IP-Adresse oder etwas, und wenn diese Information sich änderte, loggen Sie sie automatisch aus. Das macht es schwieriger für eine andere Maschine zu imitieren ... aber die IP-Adresse kann auch gefälscht werden. Es wäre jedoch ein wenig sicherer. Re: zweiten Kommentar - ja, nur eine andere Variante. – womp

Verwandte Themen