2012-10-30 12 views
5

Przeprowadziliśmy test bezpieczeństwa na naszej witrynie i wykryliśmy lukę w zabezpieczeniach.Kończenie identyfikatora sesji na serwerze

Issue

Jeżeli identyfikator sesji były znane przez atakującego, który miał dostęp do stacji roboczej użytkownika, wylogowanie sesji mogą być dostępne za pomocą cookie sesji, gdy użytkownik rozwiązał swoją sesję .

Zalecenie

Upewnij się, że identyfikatory sesji zostały prawidłowo zakończone po stronie serwera gdy funkcja jest wywoływana wylogowania.

Kod

Kod obecnie robi to (jeśli użytkownik kliknie przycisk „wylogowania”)

 FormsAuthentication.SignOut(); 
     Roles.DeleteCookie(); 
     Session.Clear(); 

Nie jestem pewien, jak sprawdzić „zapewniają, że są identyfikatory sesji poprawnie zakończone po stronie serwera po wywołaniu funkcji wylogowania. "

Zrobiłem kilka badań i myślę, że powinienem to zrobić zamiast tego?

 Session.Abandon(); 

Jeśli nie, co mam robić? (Nie jestem całkowicie pewien jak to przetestować ...)

Odpowiedz

6

W ASP.net Session.Abandon() nie jest wystarczający do tego zadania, nie usuwa pliku cookie z identyfikatorem sesji z przeglądarki użytkownika, więc każde nowe żądanie do ta sama aplikacja, po zakończeniu sesji, użyje tego samego identyfikatora sesji i nowej instancji Session State! As Microsoft states here. Trzeba porzucić sesję i wyraźny identyfikator sesji ciasteczko:

Session.Abandon(); 
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); 

Jest to również dobra praktyka, aby zmienić nazwę pliku cookie uwierzytelniania Form, w pliku web.config:

<authentication mode="Forms"> 
    <forms name=".CookieName" loginUrl="LoginPage.aspx" /> 
</authentication> 

Oto dobry artykuł na Session Attacks and ASP.NET i jak go rozwiązać.

Powiązane problemy