Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Sesja użytkownika w PHP - zagrożenia i ochrona

Session Fixation

Kolejny rodzaj ataku, określany terminem Session Fixation, różni się od opisanych wyżej metod tym, że atakujący nie skupia swojej uwagi na zdobyciu identyfikatora sesji ofiary, a raczej na skłonieniu ofiary do użycia identyfikatora określonego przez niego samego, np. poprzez odpowiednio spreparowany odnośnik z dołączonym identyfikatorem sesji. Innymi słowy, użytkownik zostaje nieświadomie skłoniony do użycia sesji zainicjowanej przez atakującego.

Atak ten przebiega standardowo w trzech krokach :

  1. Ustanowienie sesji - w pierwszym kroku atakujący tworzy losowy identyfikator sesji lub rozpoczyna nową sesję na docelowym serwerze i pozyskuje z niej identyfikator. Zazwyczaj musi on utrzymywać sesję przez wielokrotne wysyłanie żądań, aby uniknąć jej wygaśnięcia.
  2. Wymuszenie sesji - atakujący przekazuje ofierze ustalony identyfikator. Przekazanie to może się odbyć na wiele sposobów m.in. może on wykorzystać techniki polegające na iniekcji i wykonaniu wrogiego kodu, np. Cross Site Scripting. Może także skłonić ofiarę do uruchomienia odpowiednio spreparowanego odnośnika lub formularza HTML.
  3. Uzyskanie dostępu - w ostatnim kroku atakującemu pozostaje tylko czekać, aż ofiara zaloguje się do aplikacji używając ustalonego identyfikatora, po czym wykorzystując ten sam identyfikator atakujący może podszyć się pod ofiarę.

Regeneracja identyfikatora

Tego rodzaju zagrożeniu możemy przeciwdziałać stosunkowo łatwo. Po pierwsze, przy każdej zmianie poziomu uprawnień użytkownika powinniśmy wygenerować nowy identyfikator sesji za pomocą funkcji session_regenerate_id(true). Należy pamiętać o użyciu argumentu true, w przeciwnym razie poprzedni identyfikator, wraz z towarzyszącymi mu danymi, nie zostanie usunięty z systemu. Absolutnym minimum jest, aby ta zmiana nastąpiła po przejściu procesu uwierzytelniania. Oczywiście zawsze możemy regenerować identyfikator przy każdym żądaniu, jednakże wydaje mi się, że może mieć to zbyt duże konsekwencje wydajnościowe. Wszystko zależy od wielkości i rodzaju aplikacji. Pośrednim rozwiązaniem może być podmiana identyfikatora po określonej liczbie żądań lub w określonych interwałach czasowych.

<?php

session_start();

$now = time();

$regenerateSec = 1800; 

$regenerateReq = 10; 

if (!isset($_SESSION['started']))

{

    $_SESSION['started'] = true;

    $_SESSION['time'] = $now;

    $_SESSION['req'] = 1;

}

else

{

    $_SESSION['req']++;

 

    // regeneracja sesji po określonym czasie

    if (isset($_SESSION['time']) && ((int)$_SESSION['time'] + $regenerateSec < $now))

    {

        session_regenerate_id(true);

        $_SESSION['time'] = $now;

    }

 

    // regeneracja sesji po określonej liczbie żądań

    if (isset($_SESSION['req']) && ((int)$_SESSION['req'] > $regenerateReq))

    {

        session_regenerate_id(true);

        $_SESSION['req'] = 1;

    }

}

Zapobieganie adopcji identyfikatora

Kolejnym środkiem zaradczym jest uniemożliwienie tzw. adopcji sesji (ang. S ession Adoption), czyli ignorowanie identyfikatorów pochodzących od użytkownika, które nie znajdują się w magazynie danych - akceptowalne są tylko te, które system sam utworzył

<?php

session_start();

if (!isset($_SESSION['our_own']))

{

    session_regenerate_id();

    $_SESSION['our_own'] = true;

}
Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (3)
Dlaczego
Środa 10 Sierpień 2011 7:13:42 pm - chormi <niemozna_at_docholery.wydrukowac>

sobie takiego artykułu.

sesje
Wtorek 03 Luty 2009 10:49:32 am - rasp

Bardzo dobre podsumowanie tematu.

dobry artykuł
Sobota 06 Grudzień 2008 5:47:02 pm - czachor

Dobra robota. Sam byłem trochę niedouczony w temacie, więc artykuł przydał się. Dobrze i czytelnie napisany, czekam na więcej ;)

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System