Wbudowany w PHP mechanizm sesji ze względu na łatwość użycia jest zdecydowanie najbardziej popularnym sposobem przechowywania zmiennych między kolejnymi przeładowaniami strony. Niestety mechanizm ten ze względu na swoją prostotę nie jest do końca bezpieczny. Istnieją różne sposoby zabezpieczenia sesji i własne mechanizmy obsługi zmiennych sesyjnych jednak najczęściej są one dosyć skomplikowane. Ja chciałem przedstawić bardzo prosty bo wbudowany sposób uczynienia sesji bardziej bezpiecznymi.

Jak wiadomo najprostszym sposobem przechwycenia sesji np. zalogowanego użytkownika jest pobranie identyfikatora sesji SESSID i zwykłe doklejenie go do adresu. Takie działania spowoduje, że użytkownik, który dokonał takiego wklejenie staje się dla serwera tym samym użytkownikiem co ten prawdziwy. Oczywiście można nieco utrudnić taki atak poprzez włączenie opcji session.use_only_cookies jednak nadal istnieje możliwość skorzystania z cudzej sesji. Wydaje się, że dobrym rozwiązaniem byłaba zmiana identyfikatora sesji przy każdorazowym przeładowaniu strony bądź żądaniu do serwera poprzez obiekt XMLHttpRequest poprzez funkcję session_regenerate_id(). Wówczas jednak na serwerze zaczęłaby się pojawiać ogromna ilość bezużytecznych plików starych sesji. Rozwiązaniem okazuje się być wprowadzony w PHP od wersji 5.1 parametr powyższej funkcji typu bool określający czy usuwać stare pliki sesji. Dzięki temu wbudowany w PHP mechanizm sesji staje się bezpieczniejszy bo jeśli nawet atakującemu uda się przechwycić id sesji na niewiele mu się on przyda bo po ponownym przeładowaniu strony otrzyma on nowy i przy okazji inny niż atakowanego użytkownika identyfikator.

Podsumowując za pomocą funkcji session_regenerate_id(true) możemy zabezpieczyć sesję przed próbą wykorzystania jego identyfikatora przez innego użytkownika. A dzięki parametrowi true unikniemy zbędnego gromadzenia starych plików sesji.

Leave a Reply

You must be logged in to post a comment.