2013-07-01 20 views
7

Kodowania strony internetowej w PHP, która zawiera boolean $_SESSION['logged_in']. Ta wartość jest ustawiona na true, gdy nazwa użytkownika i hasło są zgodne w bazie danych.Sesja podszywania się (PHP)

Jestem całkiem nowy w sesjach i zastanawiałem się, czy możliwe jest, aby niezarejestrowany (lub, jeśli to możliwe, zarejestrowany) użytkownik pominął proces logowania, ustawiając tę ​​wartość logiczną na true, jak byłoby to możliwe w przypadku ciastko.

Rozumiem, że użytkownik musiałby manipulować zmienną po stronie serwera od strony klienta, ale moje pytania są takie proste, jak użytkownik wykonałby takie zadanie, czy istnieją znane exploity i jakie są najlepsze praktyki/środki zapobiegawcze, aby uniknąć tego rodzaju ataku?

+2

Jeśli klient może zmienić dane sesji na serwerze bez konkretnego zezwolenia, masz większe problemy. Byłbym bardziej zaniepokojony jakimś brzydkim współdzielonym hostingiem z jakimś współdzielonym katalogiem tymczasowym, w którym przechowywane są dane sesji. Lub nawet fiksacja sesji. – PeeHaa

+0

@PeeHaa, uzgodniono .. – verbumSapienti

+0

http://stackoverflow.com/questions/6912223/jest-jest-możliwością-zmienić--sesję-znaka-klienta-side –

Odpowiedz

14

Zacznijmy od dobrej nowiny: tablica $_SESSION jest domyślnie kompletnie niewidoczny i nierozpoznawalny przez klienta: istnieje na serwerze i tylko na serwerze, w środowisku wykonawczym, które nie jest otwarte dla klienta.

Teraz z powrotem na Ziemię: To całkiem proste, aby twój kod PHP "prawie w porządku", a tym samym otworzyć drzwi między klientem a sesją, jak widać na serwerze. Poza tym kradzież sesji klienta (w tym pliku cookie) jest dość łatwa.

Polecam kilka zmniejszania zagrożenia, które zostały sprawdzone dość skuteczny:

  • Nie przechowywać „zalogowany” wartości - zamiast przechowywać wartości „cookie sesji” i ustawić ciasteczko do klienta. Na życzenie klienta wykonaj coś według linii $loggedin=($_SESSION['cookie']==$_COOKIE['session']). To sprawia, że ​​osoba atakująca potrzebuje zarówno pliku cookie, jak i identyfikatora sesji.
  • Odśwież ciasteczko sesyjne dość często, na niewłaściwym cookie zabij sesję. Jeśli czarny kapelusz wykrada ciasteczko i sesję, kolejne kliknięcie przez prawdziwego użytkownika wyloguje się i utworzy zdarzenie, które można logować.
  • Jeśli twoje żądania pochodzą od JS, pomyśl o stworzeniu prostej funkcji uwierzytelniania: Zamiast wysyłać token uwierzytelniania, posól go, przypiecz go ze znacznikiem czasu, a następnie pomieszaj. Wyślij sól, znacznik czasu i hash. Spraw, aby serwer sprawdził znacznik czasu.
+0

Dziękuję za informacje i wspaniałe sugestie. – verbumSapienti

+1

Uwielbiam solone pieprze –

1

Niemożliwe, aby ktoś oprócz kodu manipulował wartościami w sesji. Aby ktoś to obejść, musiałby mieć pozwolenie na uruchomienie kodu na serwerze lub wykorzystać lukę bezpieczeństwa w twoim kodzie lub serwerze (tak czy inaczej jest to exploit bezpieczeństwa). Jeśli użytkownik jest w stanie to zrobić, prawdopodobnie nie musi zawracać sobie głowy manipulowaniem wartościami sesji, ponieważ może on wykonywać praktycznie wszystko bezpośrednio na serwerze.

0

Jedyny sposób, w jaki mogę zobaczyć, gdzie ten atak byłby możliwy, to czy jest jakiś inny exploit w twoim kodzie lub czy ma on dostęp do twojego serwera (w inny sposób). Oczywiście, jeśli mają dostęp do twojego serwera, mają dostęp do twojej bazy danych, kodu źródłowego, prawdopodobnie dzienników sieciowych, ewentualnie całego surowego ruchu internetowego, w tym haseł ....

1

Najczęstszym problemem napotkanym w domenie sesji jest Session Hijacking. Wynika to z faktu, że sesje są powiązane z parametrem sesji. Ten parametr musi być dostarczony przez użytkownika za każdym razem, gdy wysyła żądanie do serwera. Jak możesz sobie wyobrazić, jeśli ktoś jest w stanie odgadnąć lub pobrać parametr, powinien on "przejąć" sesję.

Edytuj: Aby zobaczyć środki bezpieczeństwa, spójrz na stanowisko Eugena Recka.

Powiązane problemy