Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Logowanie - Sesja + Cookies
Forum PHP.pl > Forum > Przedszkole
baripoland
Witam.
Chciałem napisać prosty skrypt logowania, oparty o sesje. Pomyślałem jednak, że jeżeli zostawię tylko sesje, to przy każdej kolejnej wizycie użytkownik będzie musiał się logować na nowo. Wtedy pomyślałem o cookies. Napisałem coś takiego w pliku login.php (on dostaje dane z panelu logowania):

  1.  
  2. //jezeli wybrano opcje "pamietaj haslo" wtedy dodaj id, login i haslo do cookies
  3. if(isset($_POST['pamietajh'];
  4. {
  5. setcookie(id, $id);
  6. setcookie(login, $login);
  7. setcookie(haslo, $haslo);
  8. }


* id nie jest pobierane do formularza, będzie mi później służył do czegoś innego, ale to nie ważne.

OK. W tym momencie mam (o ile skrypt nie ma błędów wink.gif ) zapamiętany login i hasło w cookies. Hasło jest zakodowane w md5 więc względnie jest to bezpieczne. Dodałem, więc coś takiego do pliku header.php:

  1. if(isset($_COOKIE['login']){
  2. $login = $_COOKIE['login'];
  3. session_register('login');
  4. }


Zastanawia mnie tylko jedna rzecz - czy jeśli użytkownik pogrzebie w plikach przeglądarki nie będzie w stanie zmienić loginu, np. na login administratora, przez co uzyskać możliwość zalogowania się z jego uprawnieniami?

Teoretycznie można by używać sesji zalogowany - 1 lub 0, jednak skąd wówczas skrypt ma wiedzieć jako kto dany użytkownik jest zalogowany?
Pozdrawiam i z góry wielkie dzięki za pomoc smile.gif

//UPDATE:

Przemyślałem jeszcze raz sprawę i chyba sam znalazłem rozwiązanie. Przecież, o ile user mógłby zmienić login w plikach cookies (bo inne loginy zna), to z hasłami tak już nie jest. Więc może zrobić tak, by skrypt (ten w header.php) działał następująco :

1. Sprawdzenie czy w cookies jest login i przypisanie jego wartości do zmiennej.
2. Sprawdzenie czy w cookies jest hasło i przypisanie jej wartości do zmiennej.
3. Sprawdzenie w bazie czy istnieje taki login w tabeli users.
4. Jeżeli login istnieje - sprawdź czy jego hasło zgadza się z tym ze zmiennej.
5. Jeżeli wszystko się zgadza - zarejestruj sesję o zalogowaniu.

Czy coś takiego będzie działać prawidłowo i nie będzie podatne na ataki gimnazjalistów?
Pozdrawiam
melkorm
1. w cookie co najwyżej powinno być id + hash - NIC WIĘCEJ żadnego hasła ani loginu, oszalałeś?!
2. Były ostatnio ze 3 tematy na temat "Remember Me" gdzie masz WSZYSTKO wyjaśnione i względnie bezpiecznie.


Dobrze że zapytałeś bo byś popełnił mega gafę, hasło w md5 bez soli to jest max 15 minut gdy ma się CUDA, przy cieższych kilka dni, lub 15$ w chmurze w kilka minut.
baripoland
Dzięki za odpowiedź. Znalazłem podobny temat w którym ktoś zasugerował stworzenie to samo co ty (hash). Jeżeli dobrze rozumiem ma to działać następująco :

1. Mam tabelkę token z id i hashem.
2. W skrypcie logowania, jeżeli user zaznaczył "zapamiętaj hasło" skrypt generuje losowy ciąg znaków i zapisuje go wraz z id usera do tabelki token.
3. W pliku header dodaje kodzik który, jeżeli w cookie znajdzie ten hash - szuka odpowiedniego id usera w tabeli token.
4. Jeżeli wszystko się zgadza, skrypt automatycznie loguje usera o takim id.

5. Jeżeli zalogowany użytkownik kliknie "wyloguj" wpis z tabelki token zostaje usunięty.
Pozdrawiam.
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.