Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Session hijacking a $_SESION
Forum PHP.pl > Forum > Przedszkole
Grandalf00
Witajcie! Od pewnego czasu bawie się php, napisałem sobie apke do budżetu domowego i w między czasie pojawiła się kwestia bezpieczeństwa, a konkretnie - session hijacking.

Na wielu stronach, forach i w tutkach proponuje się np pobierać User-Agent i porównywać, a nawet są pomysły z adresem IP. Jednak nawet te zabiegi są mało warte dla "chcącego" smile.gif Przeglądarki można użyć tej samej, a czytałem, że IP też można sfałszować (oczywiście musimy znać adres naszej ofiary). Wszystkie inne metody jak np ustawianie zmiennych w tablicy $_SESSION nie mają żadnego sensu.

Czy naprawdę nie ma innych metod ochrony przez wejście osobnika, który wykradł PHPSESSID? Mówie o sytuacji bez SSL i o takiej rozmawiajmy smile.gif
KsaR
1. Dodaj do ciasteczek flagę httpOnly.
Np dla sesji możesz tak:
  1. ini_set('session.cookie_httponly', true);


2. Możesz w sesji stworzyć np. Hash w ktorym będzie:
  1. $_SERVER['HTTP_USER_AGENT'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$_SERVER['HTTP_ACCEPT_CHARSET'];

I w razie gdyby się nie zgadzał możesz poprosić o ponowne zalogowanie itp, lub skasować sesję.
Grandalf00
Cytat(KsaR @ 5.06.2016, 17:12:51 ) *
1. Dodaj do ciasteczek flagę httpOnly.
Np dla sesji możesz tak:
  1. ini_set('session.cookie_httponly', true);


Tak, czytałem o tym i mam to włączone z poziomu php.ini.

Cytat(KsaR @ 5.06.2016, 17:12:51 ) *
2. Możesz w sesji stworzyć np. Hash w ktorym będzie:
  1. $_SERVER['HTTP_USER_AGENT'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$_SERVER['HTTP_ACCEPT_CHARSET'];

I w razie gdyby się nie zgadzał możesz poprosić o ponowne zalogowanie itp, lub skasować sesję.


No tak, coś można z tym kombinować + nawet User-Agent. Tylko teraz nasuwa się taka kwestia - czy w każdym zapytaniu ta dane się znajdą? Z tego co wiem, to wymagany jest tylko Host do prawidłowego zapytania.

A może zrobić takie coś: porównywać jakieś losowo generowany klucz zapisywany w dwóch lokalizacja na serwerze? Tylko jak go skorelować z sessionid?

Ekspertem nie jestem, ale wydaje mi się, że nie ma 100% metody na blokadę wejścia przez skradzione PHPSESSID, więc chyba pozostaje tylko utrudniać 1. Odczytanie ID (po stronie klienta nie mamy za dużego pola do popisu) 2. wejście do aplikacji przez przejęcie sesji.
valvadis
Dobrym zabezpieczeniem będzie zablokować możliwość wielu sesji dla jednego użytkownika, a do tego ustawić krótki czas życia sesji.

Można też zastosować protokół HTTPS.
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.