Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]zapamietaj mnie w formularzu logowania
elmozaur
post 9.02.2013, 22:45:22
Post #1





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


Witam.

Jakis czas temu napisalem na wlasne potrzeby system logowania oparty o sesje i baze danych.
Chcialbym do tego dopisac teraz checkbox do zapamietania uzytkownika jako stale zalogowanego.

Problem niby banalny bo po poprawnym zalogowaniu wystarczy dac setcookie z id usera, ip kompa i przegladarke z ktorej sie logowal.
No ale jesli ktos wylapie takie ciastko to system lezy.
Sprawa druga to kwestia taka ze ip logujacego moze sie np zmienic i co wtedy ?

czy moge prosic o podpowiedz jak podejsc do tego tematu uwzgledniajac wspolczesne kwestie bezpieczenstwa takiego autologowania


za wszelka pomoc z gory dziekuje i pozdrawiam
Grzegorz
Go to the top of the page
+Quote Post
Michael2318
post 9.02.2013, 23:48:26
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Przy zaznaczeniu checkbox'a ładujesz do bazy temu użytkownikowi losowy ciąg znaków, najlepiej dosyć skomplikowany i długi. Do tego możesz zapisać np. jego user_agent w tym momencie i też zapisać do do bazy. Tworzysz ciasteczko z zawartością tego losowego ID i na starcie, przed samym logowaniem na strone, umieszczasz kod, ktory sprawdza czy ciasteczko (nazwijmy je sobie 'autologin') istnieje, a jeśli istnieje to sprawdzasz w bazie do jakiego usera jest to ID przypisane. Jeśli znajdziesz tego usera to sprawdzasz dodatkowo czy user_agent logującego zgadza się z tym zapisanym wcześniej w bazie. Jeśli wszystko jest OK to normalnie go logujesz i dla bezpieczeństwa możesz wygenerować nowy, losowy ciąg znaków i zaktualizować go w bazie + zmienić zawartość ciasteczka. W przypadku niepowodzenia niszczysz to ciasteczko, wiadomo.
Go to the top of the page
+Quote Post
elmozaur
post 10.02.2013, 11:36:12
Post #3





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


Cytat(Michael2318 @ 9.02.2013, 23:48:26 ) *
Tworzysz ciasteczko z zawartością tego losowego ID i na starcie, przed samym logowaniem na strone, umieszczasz kod, ktory sprawdza czy ciasteczko


ciastko z losowym stringiem czy ciastko z id rekordu ? (rekord zawiera user_agenta losowy string itp.)

I ostatnie pytanie bo jesli umieszcze tego typu mechanizm w pliku index.php to czy bedziemi sie to sprawdzalo przy kazdym zaladowaniem strony czy tylko podczas probu logowania ? (zakladam ze np logowanie i prosta tresc to ten sam plik)

pozdrawiam
G
Go to the top of the page
+Quote Post
Michasko
post 10.02.2013, 12:29:05
Post #4





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

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


1. Losowy string i 'losowe ID' zostały tam użyte zamiennie. Czyli masz ciastko o nazwie 'autologin' z wartością 'losowy_string'. W bazie masz np. tabelę:
Kod
user_id | losowy_string | user_agent
i przy wywołaniu skryptu sprawdzasz czy w bazie istnieje takie ID jak w ciasteczku, i jeśli tak - sprawdzasz, czy user_agent się zgadza. Jeśli się zgadza, to logujesz użytkownika o zgodnym z tymi danymi user_id.
2. Jeśli umieścisz w jakimś pliku (u Ciebie ten index.php) to będzie wykonywane za każdym razem, gdy ktoś odwiedzi tą stronę (o adresie index.php). Należy dodać warunek, żeby się wykonywało tylko w przypadku, gdy użytkownik nie jest zalogowany.

Ten post edytował Michasko 10.02.2013, 12:33:48


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
elmozaur
post 10.02.2013, 16:47:25
Post #5





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


no tak teraz rozumie. dzieki
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: 29.03.2024 - 02:39