Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczne logowanie - co przechowywać w cookies?
Forum PHP.pl > Forum > PHP
Apocalyptiq
Ostatnio zajrzałem w ciastka youtube.com - no i tam, przy ciastku automatycznego logowania, jest bardzo długi ciąg znaków, nie wydaje mi się żeby to był hash hasła. To jest chyba unikalny ciąg znaków, który zostaje przyporządkowany każdemu użytkownikowi podczas logowania? I używany jest właśnie do automatycznego logowania, dzięki czemu nie musimy wysyłać do ciastek hasha hasła? No i podczas logowania, szukany jest w bazie użytkownik o takim hashu?

Hm, a nie prościej po prostu przechowywać tam ID użytkownika? Czy jednak istnieje jakiś sposób podrobienia ciastek?
batman
Nie wiem jak to jest na youtube, napisze CI jak ja to robię.
W ciastku trzymam identyfikator sesji, składający się z id użytkownika, kilku dodatkowych danych (ze względów bezpieczeństwa nie napiszę jakich) oraz klucza. Wszytko to leci przez md5 i przypisywane jest do użytkownika. Następnie sprawdzam, czy to co jest w ciastku pasuje do tego co jest w bazie. Dodatkowym zabezpieczeniem jest sprawdzenie co jakiś czas ciastka z wygenerowanym na żądanie hashem (nie pobranym z bazy, a stworzonym z aktualnych danych).

edit
Cytat
Hm, a nie prościej po prostu przechowywać tam ID użytkownika? Czy jednak istnieje jakiś sposób podrobienia ciastek?
Tak. Wystarczy pierwsza lepsza wtyczka do Firefoxa. Jeśli w ciastku będzie tylko id użytkownika, wówczas każdy będzie mógł sobie stworzyć ciastko z dowolnym id.
erix
A nie wystarczyłoby przedłużenie ważności ciastka sesyjnego za pomocą session_set_cookie_params" title="Zobacz w manualu PHP" target="_manual?
batman
Cytat(erix @ 17.12.2008, 19:11:33 ) *
A nie wystarczyłoby przedłużenie ważności ciastka sesyjnego za pomocą session_set_cookie_params" title="Zobacz w manualu PHP" target="_manual?

Nie, ponieważ jeśli ktoś wykradnie ciastko, uzyska dostęp do konta użytkownika, a moje dodatkowe sprawdzenie, czy wszystkie parametry się zgadzają, pozwala uniknąć tego zagrożenia.
Należy pamiętać, by poziom zabezpieczeń dostosować do klasy aplikacji. Jeśli jest to jakaś mała stronka z prostym panelem admina, to nie ma sensu kombinować z zabezpieczeniami.
erix
Wiesz, nigdy nie polegam na samym SID. ;P
Apocalyptiq
Cytat(batman @ 17.12.2008, 18:56:41 ) *
Dodatkowym zabezpieczeniem jest sprawdzenie co jakiś czas ciastka z wygenerowanym na żądanie hashem (nie pobranym z bazy, a stworzonym z aktualnych danych).


Ale po co? Skoro w bazie ma być zapisany ten hash tych pomieszanych danych, to one się nie zmienią, więc po co sprawdzać je z aktualnymi danymi? Chyba że ten hash ma się zmieniać - ale wtedy ktoś, kto ma włączone automatyczne logowanie, przy tym sprawdzaniu (jeżeli jakieś dane się zmieniły), nie zostanie zalogowany.
batman
Cytat(Apocalyptiq @ 17.12.2008, 20:21:49 ) *
Ale po co? Skoro w bazie ma być zapisany ten hash tych pomieszanych danych, to one się nie zmienią, więc po co sprawdzać je z aktualnymi danymi? Chyba że ten hash ma się zmieniać - ale wtedy ktoś, kto ma włączone automatyczne logowanie, przy tym sprawdzaniu (jeżeli jakieś dane się zmieniły), nie zostanie zalogowany.

No właśnie hash nie jest stały. Może ulec zmianie, w zależności od niektórych akcji użytkownika oraz innych czynników. A to, że ktoś nie zostanie automatycznie zalogowany, to jest to wybór mniejszego zła. Znacznie łatwiej wytłumaczyć klientowi dlaczego go nie zalogowało automatycznie, niż to, że ktoś obcy przegląda jego konto.
bełdzio
tu byłem ;-)

http://www.beldzio.com/autologowanie
Apocalyptiq
Dzięki bełdzio za artykuł smile.gif Zrobiłem to autologowanie generując przy rejestracji hash, za pomocą uniqid, z pewnym zmiennym dla każdego użytkownika prefiksem, i sprawdzanie ciastka odbywa się tak, że szukam w bazie użytkownika z takim właśnie hashem. Z tego raczej nie da rady żadnych danych wyciągnąć smile.gif Możnaby jeszcze pobawić się ze zmienianiem tego hasha co jakiś czas, ale myśle że na serwis nad jakim pracuje takie coś wystarczy smile.gif
Dzięki za pomoc!
maly_pirat
Sorka za odświeżenie starego tematu, ale jestem na etapie auto logowania, i mam parę pytań odnośnie całego projektu.

Do tabeli: uzytkownicy dodałem nową kolumnę tak jak Apocalyptiq pisał (patrz post wyżej) char(32).
Podczas rejestracji nowego użytkownika do serwisu, generuje mu unikalny hash: hash = md5(uniqid());
i wysyłam te informacje do bazy MySQL. Użytkownik od tego momentu posiada swój unikalny login, unikalny ID, oraz unikalny hash.

Teraz kwestia sprawdzania danych, jak to ma wyglądać? Na początku dokumentu na pewno wpisać:
session_start(); Ale co dalej? W jaki sposób wykonać sprawdzania czy użytkownik posiada już ciastko w tym serwisie?
Proszę tylko o zarys całego kodu.
Fifi209
Może tak $_COOKIE sprawdzisz?
maly_pirat
Ogólnie na szybko skleiłem taki kodzik, wszystko działa, jednak mam pytanie odnośnie sprawdzania tego unikalnego HASHa.

  1. <?php
  2. session_name('homepage_session');
  3.  
  4. if(isset($_COOKIE['homepage_cookie']))
  5. {
  6.        echo $_COOKIE["homepage_cookie"];
  7.        // tutaj jeszcze odnośnik do wylogowania, aby zniszczył sesje + usuną ciacho
  8. }
  9. else {
  10.    if(isset($_POST['lolek'])) {
  11.        setcookie("homepage_cookie", 'Przykładowy tekst', time()+(24*60*60));        
  12.        redir('index'); // przekierowanie na index
  13.    }
  14.    else {
  15.        // tutaj mam formularz logowania
  16.        
  17.    }
  18. }
  19. ?>


W jaki sposób mam sprawdzić unikalny hash? Wiem że trzeba pobrać z bazy informacje, ale gdzie to wstawić w skrypcie?
erix
  1. <?php
  2. if(isset($_COOKIE['homepage_cookie']))
  3. {
  4. ?>

A jak sprawdzać, to już zadanie domowe. [;
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.