Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] kodowanie hasła
Chemiq
post
Post #1





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.07.2006

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


mam system rejestracji i logowania. jest w nim zapisywanie zakodowanego hasła i działa jak należy. problem zaczyna się gdy trzeba się zalogować. przyjrzałem się problemowi i doszedłem do wniosku że hasło mimo wszystko nie jest rozkodowywane. oto kod odpowiadający za odczytywanie zakodowanego hasła:
  1. $sql = "SELECT * FROM `uzytkownik` WHERE login = '$login' AND haslo = PASSWORD('$haslo')";
  2. $result = mysql_query($sql);

jak przy logowaniu wstawie zamiast normalego hasła to zakodowane to można się zalogować.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rama
post
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 1
Dołączył: 25.02.2006
Skąd: Trójmiasto

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


Heh, nie było mnie pare godzin i już jakieś nieporozumienia, ano śmiem tak twierdzić, bo mam dobry humor, ale do rzeczy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Spróbuję ogólnie wyjaśnić o co chodzi w tym problemie, bo zrozumiałem całą tą ideologię (czytać koncept) autora i nie chce się powtarzać, by później przejść do konkretów, czyli integracji mego skryptu (wcześniej napisanego) z systemem logowania autora, czy tam autoryzacji, jak zwał tak zwał (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Idea mechanizmu autoryzacji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
a ) Użytkownik rejestruje się na specjalnej stronie (np. rejestracja.php), gdzie wprowadza hasło w postaci niezakodowanej, czyli sam tekst, i po potwierdzeniu wszystkie dane zapisywane są w bazie danych (jakieś tam tabelce), gdzie owe hasło przyjmuje postać zaszyfrowaną (password())

b ) User chcąc zalogować się na stronie wprowadza hasło do formularza w postaci niezakodowanej (plain password = 'czytelny tekst').

c ) (Mechanizm skryptu logowania)
- wprowadzenie hasła (niezakodowanego) z sesji do zmiennej $haslo
- skrypt pobiera hasło (zakodowane) z bazy
* zaszyfrowanie hasła (niezakodowanego) z formularza
* porównanie haseł (hasło z bazy = haslo z formularza)

Legend:
* - element oznaczony tym symbolem jest brakującym "ogniwem" w systemie autoryzacji.


Zintegrowanie:
  1. <?php
  2. $_SESSION['login'] = $login; //wartość pobrana z pola login w formularzu
  3. $_SESSION['haslo'] = $haslo; //wartość pobrana z pola haslo w formularzu
  4.  
  5. dbConnect("yugiohrpg");
  6.  
  7. $pr = mysql_query( "SELECT PASSWORD( '$haslo' ) as password" );
  8. $haslo = mysql_result( $pr, 'password' );
  9.  
  10. $sql = "SELECT * FROM `uzytkownik` WHERE login = '$login' AND haslo = '$haslo'"; 
  11. $result = mysql_query($sql);
  12. ?>
lub jak to wcześniej napisał (bodajże) mariuszn3
  1. <?php
  2. $_SESSION['login'] = $login; //wartość pobrana z pola login w formularzu
  3. $_SESSION['haslo'] = $haslo; //wartość pobrana z pola haslo w formularzu
  4.  
  5. dbConnect("yugiohrpg");
  6.  
  7. $sql = "SELECT * FROM `uzytkownik` WHERE login = '$login' AND haslo = PASSWORD( '$haslo' )"; 
  8. $result = mysql_query($sql);
  9. ?>
Też powinno działać, bo jak nie patrzeć są to dwie metody uzyskania tego samego efektu...

@edit
Tak sobie myśle, czy nie lepiej byłoby, aby php zajmowało się weryfikacją użytkownika?
  1. <?php
  2. $_SESSION['login'] = $login; //wartość pobrana z pola login w formularzu
  3. $_SESSION['haslo'] = $haslo; //wartość pobrana z pola haslo w formularzu
  4.  
  5. dbConnect("yugiohrpg");
  6.  
  7. $pr = mysql_query( "SELECT PASSWORD( '$haslo' ) as password" );
  8. $pass = mysql_result( $pr, 'password' );
  9.  
  10. $mq = mysql_query( "SELECT * FROM `uzytkownik` WHERE login = '$login'" );
  11.  
  12. if( mysql_num_rows( $mq ) === 1 ) 
  13. {
  14.  $userdata = mysql_fetch_assoc( $mq );
  15.  
  16.  if( $userdata['haslo'] === $pass ) 
  17.  {
  18. /**
  19.  * tutaj co ma robić po poprawnej autoryzacji
  20.  * np. przekierowanie na inna strone
  21.  */
  22.  } else {
  23. print 'Złe hasło';
  24.  }
  25.  
  26. } else {
  27.  print 'Nie ma takiego użytkownika';
  28. }
  29. ?>


PS Zakładając, że nazwy użytkownika są jakoś limitowane (np. wyłącznie z małej litery cały string) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował rama 4.08.2006, 23:49:25
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 16.10.2025 - 01:48