Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] logowanie PDO
!*!
post 31.01.2011, 01:23:42
Post #1





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Jak powinno wyglądać logowanie oparte o PDO?
  1. try
  2. {
  3. $pdo = new PDO(''.DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME.'', ''.DB_LOGIN.'', ''.DB_PASS.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  4. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5. $stmt = $pdo -> prepare('SELECT login, pass FROM users WHERE login=:login AND pass=:password LIMIT 1');
  6. $stmt -> bindValue(':login', $_POST['login'], PDO::PARAM_STR);
  7. $stmt -> bindValue(':password', $_POST['password'], PDO::PARAM_STR);
  8. $stmt -> execute();
  9.  
  10. $user=$stmt-> fetch();
  11. $stmt -> closeCursor();
  12. //print_r($user);
  13. if(!$user['login'] && !$user['pass'] || $user['login'] != $_POST['login'] && $user['pass'] != $_POST['password']){echo 'nie działa';}else{echo 'login i hasło się zgadzają';}
  14.  
  15. }
  16. catch(PDOException $e)
  17. {
  18. echo 'Błąd połączenia: ' . $e->getMessage();
  19. }


Napisałem coś takiego, jednak niejestem pewien co do sprawdzenia czy login i hasło istnieją, a jeśli tak to czy są takie same jak te podane przez POST... i mam problem z wielkością liter, obecnie jeśli w bazie mam login "admin" i hasło "test", to po wysłaniu danych "Admin", "Test" zostane zalogowany...


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Crozin
post 31.01.2011, 01:29:43
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


A co ma PDO do algorytmu logowania? Jak nie wiesz jak zrobić logowanie to sobie poszukaj php [nazwa bazy] logowanie użytkowników.

Cytat
i mam problem z wielkością liter, obecnie jeśli w bazie mam login "admin" i hasło "test", to po wysłaniu danych "Admin", "Test" zostane zalogowany...
Pomijając fakt, że jest to raczej pożądane zachowanie... zmień parametr COLLATION w bazie danych z *_ci (case-insensitive) na *_cs (case-sensitive).
Go to the top of the page
+Quote Post
ViX
post 31.01.2011, 01:34:15
Post #3





Grupa: Zarejestrowani
Postów: 114
Pomógł: 9
Dołączył: 19.11.2007
Skąd: Kraków

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


Cytat(!*! @ 31.01.2011, 01:23:42 ) *
  1. if(!$user['login'] && !$user['pass'] || $user['login'] != $_POST['login'] && $user['pass'] != $_POST['password']){echo 'nie działa';}else{echo 'login i hasło się zgadzają';}
  2.  


Po co tak kombinować? Nie prościej wysłać zapytanie do bazy typu
  1. SELECT * FROM 'users' WHERE login='$login' AND password='$password'


a następnie tylko odczytać wartości

  1. if($query['id']>0)
  2. {
  3. echo('Wszystko ok');
  4. }
  5. else
  6. {
  7. echo('Nie ma usera lub błędne hasło');
  8. }


Cytat(Crozin @ 31.01.2011, 01:29:43 ) *
Pomijając fakt, że jest to raczej pożądane zachowanie...

Rozumiem kwestię loginu, ale osobiście nie cieszyłby mnie fakt, gdyby można było zalogować się na moje konto z hasłem "super tajne hasło", gdy specjalnie utrudniłem je do "SupeR TajNe HASŁO"...

Ten post edytował ViX 31.01.2011, 01:34:55


--------------------
Poszukujący wiedzy
Go to the top of the page
+Quote Post
kiler129
post 31.01.2011, 04:17:58
Post #4





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


...dodajmy też, że haseł NIE TRZYMA SIĘ PLAINTEXTEM! Conajmniej md5 a najlepiej crypt z solą.


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
Fifi209
post 31.01.2011, 08:07:23
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


kiler a nie przypadkiem funkcja hashująca + sól ?;]


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
darko
post 31.01.2011, 10:23:27
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(Crozin @ 31.01.2011, 01:29:43 ) *
(...) zmień parametr COLLATION w bazie danych z *_ci (case-insensitive) na *_cs (case-sensitive).

Pomógł (klik) Dzięki Crozin, nie wiedziałem tego. W temacie, ja robię tak, że wyciągam z bazy tylko id użytkownika i jeśli ta wartość jest liczbą to znaczy, że znaleziono użytkownika w bazie o podanym loginie i haszu hasła. Hasła oczywiście są przechowywane w postaci haszy z solą tworzoną na podstawie id użytkownika, daty rejestracji w systemie i jeszcze kilku stałych wartości.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
ViX
post 1.02.2011, 02:43:24
Post #7





Grupa: Zarejestrowani
Postów: 114
Pomógł: 9
Dołączył: 19.11.2007
Skąd: Kraków

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


Cytat(fifi209 @ 31.01.2011, 08:07:23 ) *
kiler a nie przypadkiem funkcja hashująca + sól ?;]


Osobiście stosuję podwójne hashowanie z soleniem, na jednym z kursów polecali takie rozwiązanie więc używam go po dziś dzień.

  1. $hash = md5('i_like_salt'.sha256($password.$register_time).'very_long_salt');


--------------------
Poszukujący wiedzy
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 - 07:55