Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczne logowanie
Forum PHP.pl > Forum > PHP
deha21
Witam,
Zrobiłem zapamiętywanie logowania na swojej stronie. Chciałbym się dowiedzieć czy jest bezpieczne.

Po prawidłowym zalogowaniu dodaje Cookie z ID oraz do drugiego Cookie o wartości losowego ciągu znaków który jest przyporządkowany do każdego użytkownika (zapisane w bazie). Przy wejściu na stronę porównuję:

  1. if ($_cookie['id'] && $_cookie['znaki']) {
  2.  
  3. //wyciągam z bazy usera który ma ID takie jak w Cookie
  4.  
  5. if ($_cookie['znaki']==$row['znaki']) { echo "zalogowano"; }
  6.  
  7. }


Czy jest to bezpieczne wyjście? Po wylogowaniu Cookie oczywiście się usuwa.

Bo gdy np. ktoś sobie zmieni nr ID w cookie to musi jeszcze znać ciąg znaków, jeżeli zmieni na jakiś dziwny to mu tego nie uzna. Teoretycznie jest ok chyba winksmiley.jpg
vokiel
A po co Ci 2 zmienne w cookie? Możesz przecież zrobić sha1(id+username+pass) i później to porównywać z pobranym z bazy.
deha21
Chodzi o to, żeby trzymać np. 12+nazwa+123123123123 i potem to rozdzielić przez explode i porównać? Możesz rozwinąć?
patrix007
Ja u siebie rozwiązałem to w następujący sposób.
Gdy user loguje się na konto zapamiętuję w bazie danych informacje o browserze, systemie i wtyczkach, generuję także własny identyfikator sesji tworzony na podstawie ustalonego przeze mnie algorytmu i od razu go koduję md5. Następnie w ciastku zapisuję identyfikator usera, zakodowane md5 informacje o browserze i zakodowany identyfikator sesji, ciastko ma ważność 14 dni. Po np. restarcie komputera i ponownym wejściu na moją stronę odpowiednia funkcja sprawdza zapisane ciastka, jeśli wszystko się zgadza następuje automatyczne logowanie, jeśli coś się nie zgadza user zostaje wylogowany tj. informacje w bazie nadpisane randem a ciastka zniszczone. Bezpieczeństwo dodatkowo zwiększyłem tym, że identyfikator sesji jest zmienny tj. osoba poruszając się po stronie generuje nowe identyfikatory w ramach swojej sesji, tak więc kradzież ciastek nic nie da... a nawet gdyby to haker ma tylko "jeden strzał" zanim skradzione ciastko zostanie zniszczone, informacje o ciastku w bazie nadpisane a właściciel konta poinformowany o tym zdarzeniu winksmiley.jpg
deha21
No to widzę, że ty masz już bardziej zaawansowane logowanie winksmiley.jpg Jeśli chodzi o cookie i sesje to ja jestem żółtodziub winksmiley.jpg
CuteOne
Ściągnij sobie IPB i zobacz jak tam jest rozwiązany problem z zabezpieczeniem ciasteczek( cookie stronghold ).

patrix007: ohmy.gif a nie lepiej ustawić time to life dla sesji( np. na 30 min ) zamiast odnawiać przy każdej operacji? a ważniejsze procesy jak usuniecie konta, zmiana maila itp. zabezpieczyć poprzez wpisanie hasła przez użytkownika.
thek
Patrix... a co się dzieje gdy user ma więcej niż jednego browsera w akcji? Ja notorycznie żongluję 4 przeglądarkami (najnowsze wersje stabilne, nie-bety: IE, Fx, Opery i Chrome) i za każdym razem przy ciastkach by mnie wywalało winksmiley.jpg Bo się hash user-agenta by nie zgadzał.
deha21
Czy sposób vokiela żeby mieszać dane usera i szyfrować a potem porównywać z danymi z bazy jest dobry? No i pytanie czy ten mój jest w miarę bezpieczny żeby go przetrzymać aż do ulepszenia na coś mocniejszego jeśli trzeba?
vokiel
Ja zapisuję w ciasteczku hash takich danych, po których można zrobić ponowne logowanie. Czyli, jeśli normalnie do logowania używam, załóżmy takiej kombinacji:
  1. $login_string = sha1($login.SALT.$haslo);
  2. $query = "SELECT `ID` FROM `USRERS` WHERE sha1(CONCAT(`LOGIN`,'".SALT."',`PASS`))='".$login_string"' ;";

Teraz po zapisaniu $login_string do ciasteczka, przy ponownym wejściu można zrobić zwykłe logowanie jeśli odpowiednie ciasteczko istnieje.

Oczywiście dobrze jest zapisać w bazie czy dany użytkownik ma włączone autologowanie.
patrix007
Cytat(thek @ 17.08.2010, 09:53:23 ) *
Patrix... a co się dzieje gdy user ma więcej niż jednego browsera w akcji? (...)


Wtedy Cię wyloguje, nie przeoczyłem tego faktu - taki cel jest zamierzony oczywiście.
Większość ludzi używa jednej przeglądarki i nie przełącza się między innymi zbyt często.

Łatwiej wytłumaczyć komuś, dlaczego go wyrzuca ze strony (aby się dostosował)
niż dlaczego ktoś inny zalogował się na jego konto smile.gif

Chętnie bym przeczytał jakie rozwiązania stosują inni w swoich skryptach (na pewno usłyszałbym o wielu lepszych rozwiązaniach),
niektórzy logują nawet IP ale ja uznałem, że to byłoby już zbyt drastyczne zwłaszcza jak ktoś ma zmienny adres.

Cytat(CuteOne @ 17.08.2010, 09:27:56 ) *
patrix007: ohmy.gif a nie lepiej ustawić time to life dla sesji( np. na 30 min ) zamiast odnawiać przy każdej operacji? a ważniejsze procesy jak usuniecie konta, zmiana maila itp. zabezpieczyć poprzez wpisanie hasła przez użytkownika.


Prawdę mówiąc przy każdej operacji to się nie dzieje, byłoby to zbyt obciążające ale tak w miarę często.
30 minut to raczej nikt w moim systemie nie siedzi smile.gif
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.