Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana id sesji i usunięcie poprzedniej
Forum PHP.pl > Forum > PHP
Mephis
Witam.

Od jakiegoś czasu zagłębiam się w tajniki zabezpieczania stron i piszę od podstaw mały CMS. Czytałem na temat kradzieży sesji i jakie niesie to za sobą konsekwencje, więc postanowiłem pogłowić się nad rozwiązaniami tego problemu i mimo poszukiwań - brak prostych, skutecznych rozwiązań. Z tego co rozumiem, generowanie nowego id sesji nie daje nic - zmienne przechowywane w poprzedniej sesji wciąż istnieją na serwerze i posiadają te same dane a wykradnięcie tej starej sesji dalej jest możliwe. W dodatku za każdym razem tworzy się nowy plik sesji na serwerze a przy tysiącach użytkowników strony może dać to tysiące nowych plików co parę sekund (nie mierzę w takie liczby, to tylko przykład).

Napisałem niewielki kod, który w efekcie końcowych zmienia sam identyfikator sesji za każdym razem, i usuwać poprzedniki:
  1. foreach($_SESSION as $var => $value) {
  2. $TEMP_SESSION[$var] = $value;
  3. }
  4.  
  5. foreach($TEMP_SESSION as $var => $value) {
  6. $_SESSION[$var] = $value;
  7. }

Do tymczasowej tablicy ładuję zmienne z tablicy sesji, usuwam sesje, tworzę nową o innym id, i przypisuję sesji zmienne i wartości znajdujące się tablicy tymczasowej.

Zaiste to tylko kawałek kodu, zamierzam obudować go w klasę i dodać do tego coś w rodzaju sprawdzania czy użytkownik sesji wciąż użytkuje z tego samego systemu i przeglądarki (przypisywanie ip odpada bo ponoć nie sprawdza się w sieciach osiedlowych).

Czy takie rozwiązanie ma sens i czy nie obciąża tym znacznie serwera?
nospor
Totalnie bez sensu.... PRzeciez o to:
session_regenerate_id(true);
robi wszystko to co chciales. Nadaje nowy identyfikator i jednoczesnie kasuje starą sesje. przeczytales w ogole w manualu opis tej funkcji i jej parametrow?
Mephis
Owszem, session_regenerate_id(true) nadaje nowy identyfikator sesji, jednak wcześniejsza sesja dalej istnieje i znajdują się w niej dane te same, co w nowej sesji. Stara sesja nie jest automatycznie usuwana, a w przypadku jej kradzieży można korzystać z danych w niej zawartych.'

Oczywiście jeżeli sesje o których mowa znajdują się w folderze /tmp serwera...
nospor
http://pl1.php.net/session_regenerate_id
Cytat
delete_old_session

Whether to delete the old associated session file or not.
A ty ten parametr ustawiasz na TRUE wiec kasujesz starą sesję.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.