Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Automatyczne logowanie
deha21
post 16.08.2010, 19:28:16
Post #1





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
vokiel
post 16.08.2010, 20:07:44
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
deha21
post 16.08.2010, 22:30:16
Post #3





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


Chodzi o to, żeby trzymać np. 12+nazwa+123123123123 i potem to rozdzielić przez explode i porównać? Możesz rozwinąć?

Ten post edytował deha21 16.08.2010, 22:30:36


--------------------
Go to the top of the page
+Quote Post
patrix007
post 16.08.2010, 22:47:33
Post #4





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował patrix007 16.08.2010, 22:50:31
Go to the top of the page
+Quote Post
deha21
post 16.08.2010, 23:15:17
Post #5





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
CuteOne
post 17.08.2010, 08:27:56
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Ś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.

Ten post edytował CuteOne 17.08.2010, 08:28:56
Go to the top of the page
+Quote Post
thek
post 17.08.2010, 08:53:23
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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ł.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
deha21
post 17.08.2010, 09:47:05
Post #8





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
vokiel
post 17.08.2010, 10:41:04
Post #9





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
patrix007
post 17.08.2010, 14:43:44
Post #10





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:07