Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: cookies, a dane logowania
Forum PHP.pl > Forum > PHP
wezyrno
Czy cookies może służyć, nie do zapamiętania logowania aby użytkownik nie musiał się ciągle logować, ale do zapamiętania danych logowania w polach formularzu? Ja wiem, że to robi przeglądarka za zgodą człowieka, ale czy można to zrobić w formie cookie (tzn. uzupełniać zawsze formularze)?
404
Tak, ale nie radziłbym przechowywać hasła...
trueblue
Jeśli chcesz stworzyć opcję "zapamiętaj mnie", to owszem można zapamiętać login, ale hasło w postaci zaszyfrowanej.
O kodowaniu hasła decydujesz Ty.
Na podstawie tych dwóch danych sprawdzasz czy użytkownik może się logować w ten sposób.
404
Cytat(trueblue @ 21.06.2014, 22:39:42 ) *
Jeśli chcesz stworzyć opcję "zapamiętaj mnie", to owszem można zapamiętać login, ale hasło w postaci zaszyfrowanej.
O kodowaniu hasła decydujesz Ty.
Na podstawie tych dwóch danych sprawdzasz czy użytkownik może się logować w ten sposób.
Chyba sobie żartujesz.........
trueblue
Nie żartuję, ale z rozpędu.
Nie hasło, ale jakiś identyfikator użytkownika.

P.S. Pisząc o kodowaniu miałem na myśli sposób solenia.
wezyrno
Cytat
Tak, ale nie radziłbym przechowywać hasła...

Dlaczego?
Turson
Nikt nie zaleca przechowywania hasła w jawnej formie w ciasteczkach bo ciasteczka m.in. można podejrzeć i tym samym odczytać hasło.
wezyrno
a w podstaci zakodowanej?
Crozin
Ale po co w ogóle trzymać jakiekolwiek dane użytkownika w ciastkach?

- generujesz losowy ciąg,
- zapisujesz go do bazy danych wraz z ID powiązanego użytkownika,
- zapisujesz go w ciastku,
- przy kolejnych odsłonach pobierasz sobie ID użytkownika na podstawie tego losowego ciągu.
Pyton_000
sam losowy ciąg nie wystarczy bo wystarczy przenieść go na inna maszynę i juz mamy pełny dostęp.
Trzeba zabezpieczyć maksymalnie zapisując IP, UA i inne elementy aby w miarę jednoznacznie rozpoznać użytkownika
Crozin
@Pyton_000: Generalnie dokładnie tak samo jak chociażby z ciasteczkiem sesyjnym. IP/UA niejednokrotnie są na tyle ulotne, że nie można ich potraktować jako elementu identyfikującego.
Pyton_000
Zgadza się, ale ulotność ma zapobiec przenoszeniu UID na inne maszyny i tam się logować automatycznie. Zmiana IP musi nie pozwolić zalogować użytkownika z automatu. A że IP czasami się często zmienia to dodatkowo UA + dodatkowe dane które można wyciągnąć od usera. Wtedy sprawdzasz np. 3 warunki i jeżeli 2 zachodzą to dajesz dostęp a jak nie to sorry Winnetou
wezyrno
ale nie rozumiem... przecież ciasteczka są tylko na PC użytkownika, wiec jak można je pozyskać? po co te zabezpieczenia?
przecież w taki sam sposób zapisuje to przeglądarka

mi przecież nie chodzi zapamiętywanie logowania,
ale o SAMO uzupełnianie formularzy - do wciśnięcia buttonu logowania
nospor
1) Ktos wejdzie na komputer, z ktorego sie logowales i pozna twoje haslo
2) Bedziesz mial dziurawą strone, a patrzac na to ze nie rozumiesz tego co chcesz zrobic, to na pewno bedziesz mial dziurawą strone i przy pomocy ataku XSS bedzie mozna wykraść ciastka dowolnej osobie wchodzącej na Twoją strone.

Cytat
przecież w taki sam sposób zapisuje to przeglądarka
No raczej nie....
Po pierwsze przegladarki nie zapamietują hasel
Po drugie jak juz zapamietują to jest to specjalny mechanizm, w ktorym mozna dane zakodowac ogolnym haslem nalozonym na przegladarke
Po trzecie dane te nie są dostepne z poziomu js i raczej luka XSS w twojej stronie nie pozwolila by na zdobycie tych danych

Podsumowujac:
przyjmij do wiadomosci, ze to co chcesz zrobic, czyli zapamietanie loginu i hasla by sie samo do forma zapisywalo, to bardzo zly pomysl. Jakbym gdzies na stronie kiedys zobaczyl ze jakis "geniusz" tak zrobil, to bym omijał te strone z daleka
wezyrno
Dzięki,
mam więc jeszcze jedno pytanko tyczące się już innej kwestii. To jak jest więc z tą opcją "zapamiętania logowania" na stronach, działającą w ten sposób, aby gracz nie musiał się logować cały czas po wejściu na stronę. To jest zapisywane w sesji, nie w ścisłych ciasteczkach? Jak to działa, skoro nie zapisuje hasła.
Brick
Opcja "zapamiętaj mnie" polega na tym że w pliku cookie zapisujesz dłuższy czas jego ważności, np 3 miesiące lub rok
  1. if ($remember==1) //użytkownik zaznaczył "zapamiętaj mnie"
  2. $time = time() + 60*60*24*30*12; //cookie ważne rok
  3. else
  4. $time = 0; //cookie jest usuwane po zamknięciu przeglądarki
  5.  
  6. setcookie("user_id",1,$time,"/");
Oczywiście nazwa i wartość cookie są przykładowe.

Za to samo logowanie można zrealizować w ten sposób, że zapisujesz dwa pliki cookie. Pierwszy to ID użytkownika z bazy, drugi to zaszyfrowana za pomocą algorytmu md5 kombinacja hasła+ID+jakiś ciąg znaków
  1. $user_id = 1; //unikalny ID użytkownika z bazy
  2. 1. setcookie("user_id",$user_id,$time,"/");
  3.  
  4. $string = "jakis_tekst"; //dowolny ciąg znaków
  5. $uniq = md5($user_id.$haslo.$string);
  6. 2. setcookie("uniq",$uniq,$time,"/");
Po każdym wyświetleniu strony pobierasz dane z bazy dla użytkownika $user_id i porównujesz hasło z tym co ma w cookie (przeprowadzając oczywiście operacje jak wyżej czyli md5 itd)

Do kontroli całego mechanizmu logowania zaleca się korzystanie z sesji PHP http://pl1.php.net/manual/en/book.session.php, które są bezpieczniejsze niż własne pliki cookie.
wezyrno
Dzięki przeogromne za dokładne objaśnienie.
Skrypty się przydadzą!
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.