2013-07-09 4 views
6

Ich versuche, eine Reihe von Sicherheitsproblemen auf einer ziemlich großen ASP.NET-Webanwendung (C#) zu arbeiten. Um Session-Fixierungsangriffe zu verhindern, möchte ich jedes Mal, wenn sich ein Benutzer authentifiziert, eine neue Session-ID generieren. Ich möchte jedoch nur eine neue Sitzungs-ID generieren, ohne den Rest der Sitzung zu verlieren. einige der Forschung zu diesem Thema Nachdem ich fand ich ein paar Arbeitslösungen:Erstellen einer neuen SessionID bei der Anmeldung (ASP.NET)

Lösung 1: Generating new SessionId in ASP.NET
Dies deutet auf den Session-Cookie manuell Clearing es auf einen leeren String zu setzen. Dies erfordert jedoch entweder eine Seitenaktualisierung oder die Verwendung von AJAX, um sicherzustellen, dass der Cookie tatsächlich entfernt wird, was in meinem speziellen Fall keine wirklich praktikable Option ist.

Lösung 2: Generating a new ASP.NET session in the current HTTPContext
Ich habe diesen Ansatz umgesetzt und es funktioniert wie erwartet. Wie das Original-Poster jedoch sagt, ist dies nicht wirklich eine elegante Lösung. Außerdem ist dieser Beitrag ein paar Jahre alt und ich hoffe, dass es heutzutage eine bessere Lösung gibt. Ich würde gerne wissen, ob es Alternativen gibt, die ich bei meinen Recherchen verpasst habe, oder wenn etwas wie Lösung 2 möglich ist, ohne die Session Management Interna zu manipulieren.

+1

Ich habe das gleiche Problem mit Ihnen und AFAIK, Lösung2 war im Wesentlichen die gleiche Lösung1, beide versuchen, eine neue SessionID für aktuelle httpcontext zu regenerieren. endlich fand ich diesen Link: http://stackoverflow.com/questions/5502435/regenerate-sessionid-in-asp-net, und tat es mit Erfolg. Es ist ein viel einfacherer Weg, dies zu erreichen. – pinopino

+0

Schließlich, gibt es eine Möglichkeit, Ihr Problem zu lösen? Oder hast du dich selbst gelöst? Bitte teilen Sie Ihre Lösung, damit jeder mehr Wissen bekommen kann. XD –

Antwort

4

Es ist nicht so einfach zu erreichen, was Sie wollen, wie Sitzungsverwaltung in ASP.NET, re Solution Number 2 funktioniert. Die Lösung (2) scheint ein wenig riskant in Anbetracht der ASP.NET Session State Implementierung Details ändern Irgendwann.

Ich würde eine Variante der Lösung 1 empfehlen, wo Sie die relevanten Daten aus der Sitzung in db/cache speichern, wenn der Benutzer authentifiziert, eine neue Sitzung für den Benutzer und dann füllen Sie diese mit den Daten, die Sie benötigen. Da Daten von einer "nicht authentifizierten" Sitzung in eine "authentifizierte" Sitzung verschoben werden, sollten Sie auch darauf achten, diese Daten zu validieren.

Das manuelle Löschen des Sitzungscookies kann ein rutschiger Abhang sein, re Ramping up ASP.NET session security. Sie finden eine robustere Lösung in den authentifizierten Sitzungskennungen der NWebsec.SessionSecurity (Haftungsausschluss: Ich bin der Entwickler für dieses Projekt).

0

Web.Config ändert sessioncookie = "ABC"

In Login.aspx Seite im Block!

Response.Cookies.Add (neue Http ("ABC", "")) IsPostBack schreiben ;

Enjoy

- Spart Zeit ist gut!

+0

könnten Sie diesen Ansatz näher erläutern? Was macht diese Arbeit? – Kristopher

+0

Idealerweise erstellt es eine neue Sitzungs-ID mit dem angegebenen Namen, sobald Sie sich angemeldet haben. Sie können in den Chrome-Entwickler-Tools die Cookies der Ressourcen-Registerkarte einchecken. Dies macht es Hackern schwer, die gleiche Sitzung erneut zu starten. –