Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Bezpieczeństwo sesji
Forum PHP.pl > Forum > Przedszkole
chormi
Witam buduję swoją aplikację. Staram się utrudnić życie kombinatorom.

Pseudokod:

  1.  
  2. // ktoś wchodzi na strone.
  3.  
  4. stworzenie_sesji()
  5. {
  6. - generowanie keya sesji
  7. - zapis do bazy (userid=0, useragent, ip) // niezalogowany userid 0
  8. - zapis id rekordu z tabeli sesji do 'sid' w SESSION
  9. - zapis keya w SESSION
  10. }
  11.  
  12. jako niezalogowany
  13. {
  14. stworzenie_sesji();
  15. nakaz_zalogowania();
  16. }
  17.  
  18. logowanie()
  19. {
  20. - zmodyfikowanie keya sesji
  21. - zapis keya w SESSION
  22. }
  23.  
  24. jako zalogowany
  25. {
  26. pobranie danych z tabeli sesji - rekord o 'sid'
  27.  
  28. porównanie:
  29. - klucza zapisanego w sesji
  30. - adresu ip
  31. - useragent
  32. z rekordem w tabeli sesji
  33.  
  34. jeżeli któreś z powyższych się nie zgadza
  35. {
  36. niszczenie sesji
  37. usuwanie wpisu sesji z tabeli
  38. nakaz_zalogowania();
  39. }
  40. }
  41.  


W sesji php trzymam tylko:

'sid' czyli id rekordu z tabeli sesji
skey czyli unikalny identyfikator sesji taki sam zapisywany jest w rekordzie sesji

Sessionid trzymane i przekazywane tylko w ciastku.
Zmiana sessionid przez session_regenerate_id.

Rozmyślałem też nad trzymaniem ip,useragent i userid w sesji żeby rzadziej korzystać z tabeli sesji.

Coś poprawić? Jakieś sugestie?
StrefaPi
UserAgent nie jest żadnym zabezpieczeniem... Jak dla mnie zabiera tylko miejsce... ;)
chormi
Cytat(StrefaPi @ 22.03.2013, 23:56:26 ) *
UserAgent nie jest żadnym zabezpieczeniem... wink.gif


Wiem ale w połączeniu z porównywaniem ip i ciągu generowanego przy starcie sesji, zalogowaniu i porównywaniu go z ciągiem zapisanym w tabeli sesji już chyba lepiej? Mówcie co można ulepszyć w logice.
Damonsson
Oczywiście, że jest.
StrefaPi
Tylko po co?
Damonsson
Jest kolejnym elementem układanki, którą trzeba ułożyć w całość, żeby wygrać, a im więcej elementów tym trudniej/dłużej. Choć oczywiście jest to prowizoryczne, jednak jest.
StrefaPi
Akurat to ten najłatwiejszy element, który moim zdaniem najwięcej zajmuje... EOT
chormi
Załóżmy, że obaj userzy mają najnowszego ff i autoupdate. Wtedy rzeczywiśćie identyfikacja przez UA leży.

Nic się nie dowiedziałem.

Odświeżam.

// edit.

Jesteście zajebiście pomocni. Nic się nie dowiedziałem. Nie mam pojęcia po co w ogóle ten dział istnieje.
!*!
Cytat(chormi @ 23.03.2013, 10:24:47 ) *
Jesteście zajebiście pomocni. Nic się nie dowiedziałem. Nie mam pojęcia po co w ogóle ten dział istnieje.


Trudno, aby w mechanizmie sesji tworzyć coś nowego, jakbyś poświęcił 5 sekund na użycie wyszukiwarki, zobaczyłbyś "kilka" postów z tym związanych, w których, wypowiedzi użytkowników forum wyczerpały temat.
A w Twoim kodzie, nie zauważyłem "czasu".
Fifi209
Cytat(chormi @ 23.03.2013, 11:24:47 ) *
Załóżmy, że obaj userzy mają najnowszego ff i autoupdate. Wtedy rzeczywiśćie identyfikacja przez UA leży.

Mogą mieć systemy inne, inne wersje samego systemu 32 i 64 bit a czasami też to jest pokazane.

Można też dodać:
$_SERVER['HTTP_ACCEPT_LANGUAGE']

etc.

Wystarczy wyprintować sobie $_SERVER na różnych przeglądarkach i zobaczyć co się zmienia.
StrefaPi
może jeszcze sprawdźmy jaką mają rozdzielczość ekranu... jak już pisano wyżej - to jest kolejne zabezpiecznie... tylko czasem po co to robić... ;)

btw. włączony autoupdate nic nie daje, to nie o to chodzi w tym... Safari w narzędziach dla Developerów ma możliwość w menu wpisania w User Agent czegokolwiek i będzie wszystko działało...
chormi
Ok. co ile regenerować id sesji po określonej liczbie żądań czy co jakiś czas np. 3 min?
markonix
Cytat(StrefaPi @ 23.03.2013, 13:21:51 ) *
może jeszcze sprawdźmy jaką mają rozdzielczość ekranu...

Nie wiedziałem, że takie rzeczy da się wyczytać z poziomu PHP thumbsdownsmileyanim.gif
Fifi209
Cytat(markonix @ 23.03.2013, 20:42:11 ) *
Nie wiedziałem, że takie rzeczy da się wyczytać z poziomu PHP thumbsdownsmileyanim.gif

Nie z poziomu php ale można tego użyć, odczytywać js, ajaxem przesyłać i już
markonix
Cytat(Fifi209 @ 23.03.2013, 19:50:35 ) *
Nie z poziomu php ale można tego użyć, odczytywać js, ajaxem przesyłać i już

Wiem, jak i wiele innych zmiennych środowiskowych, ale sesja to PHP, a takie rzeczy to już jak dla mnie bardziej pod everocookie podchodzą.
Sesja powinna działać niezmiennie w różnych urządzeniach (brak javascriptu, wyłączony).
Fifi209
No to albo masz dodatkowo rozdzielczość albo nie masz, jak nie masz to omijasz ten warunek. Kto normalny teraz wyłącza js?
markonix
Ja i 2 miliony użytkowników firefox.

btw. i co? proponujesz w tablicy bazodanowej z sesją dodatkową kolumnę "resolution"?
StrefaPi
ojej lol - o rozdzielczości napisałem to w ramach żartu na temat przesadności takich zabezpieczeń...
ogólnie jestem przeciwny nawet zapisywaniu UserAgent jako wyznacznika użytkownika... ;) co chyba jasno wynikało z tego tematu...

ps. "normalny" użytkownik internetu nie wyłącza js bo facebook nie działa wtedy... 2 milinoy użytkowników Firefoxa to mniej niż 0,5% wszystkich użytkowników Firefoxa (tylko Firefoxa)
!*!
Cytat(chormi @ 23.03.2013, 19:33:55 ) *
Ok. co ile regenerować id sesji po określonej liczbie żądań czy co jakiś czas np. 3 min?

I jedno i drugie. Choć sprawdzanie czy jest ok co 3 min może być kłopotliwe, w zależności od serwisu.
pyro
Cytat(markonix @ 23.03.2013, 20:06:01 ) *


To że wtyczka ściągnięta i zainstalowana - nie znaczy że używana. Poza tym to jest chyba licznik ściągnięć, a jak każdy ściąga po kilka razy.... no to się robi malutki procent użytkowników rzeczywiście używających danej wtyczki smile.gif . Też mam NoScript, ale używam jej tylko do analizy podejrzanych aplikacji.

Nie wyobrażam sobie surfowania po internecie bez JS. To tak jakby wbić sobie gwóźdź w kolano i iść na spacer. Niby można, ale... smile.gif (zwłaszcza że JS / AJAX się bardzo teraz rozwija)
markonix
Ja uważam, że to świetna wtyczka ponieważ blokuje naprawdę dużo syfu typu "ukryte lajki", dużo skryptowych i nachalnych reklam.
Poza tym wejście z noscirptem na zainfekowaną stronę nie powoduje pobrania wirusa (wyłączam na chwilę - od razu antywirus alarmuje), z noscriptem jeszcze nigdy mi się nie zdarzyło złapać niczego z sieci. Zabezpiecza też przed atakami np. CSRF. No i przecież ta wtyczka blokuje tylko skrypty określone przez użytkownika, nie wszystkie.. Wiadomo, że są strony, które bez JS w ogóle tracą funkcjonalność.

To tylko jedna wtyczka, która tak działa, JS można po prostu wyłączyć. Nie wiem w jakiej wersji, abo po jakimś autoupdate ale w IE miałem skrypty wyłączone domyślnie. Mamy jeszcze urządzenia mobilne starszej generacji, przeglądarki specjalistyczne itp. W każdym razie upieram się, że sesja powinna być rozwiązaniem serwerowym.
StrefaPi
Cytat(markonix @ 24.03.2013, 11:41:53 ) *
W każdym razie upieram się, że sesja powinna być rozwiązaniem serwerowym.

a kto powiedział, że nie powinna być takim rozwiązaniem...

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.