Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja PASSWORD()
raqqos
post 28.06.2005, 12:34:29
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.06.2005
Skąd: Płock

Ostrzeżenie: (10%)
X----


Mam taki problem: za pomocą pliku wsadowego tworze baze z jednoczesnym wpisem rekordu administratora w tabeli urzednicy(pola:id, imie, nazwisko, login, haslo, status_admin). Wszystko ładnie, pięknie się wpisuje - hasełko jest szyfrowane (za pomocą funkcji password()), ale kiedy chcę odczytać ten rekord poprzez funkcję logującą - klapa.
Kod wygląda tak:
  1. <?php
  2. require_once('funkcje_zakladki.php');
  3.  
  4. $login = $HTTP_POST_VARS['login'];
  5. $haslo = $HTTP_POST_VARS['haslo'];
  6.  
  7. if ($login && $haslo)
  8. // właśnie nastąpiła próba logowania
  9. {
  10.  if ($loguj = loguj($login, $haslo));
  11.  {
  12. if ($loguj == 'admin')
  13. {
  14.  $HTTP_SESSION_VARS['uzyt_admin'] = $login;
  15. }
  16. elseif ($loguj == 'zwykly')
  17. {
  18.  $HTTP_SESSION_VARS['uzyt_zwykly'] = $login;
  19. }
  20. else
  21. {
  22.  // niepomyślne logowanie
  23.  tworz_naglowek_html('Problem:');
  24.  echo 'Błąd logowania!
  25. Należy być zalogowanym aby oglądać tę stronę.';
  26.  tworz_html_url('logowanie.php', 'Logowanie');
  27.  print_r($loguj);
  28.  tworz_stopke_html();
  29.  exit;
  30. }
  31.  }
  32. }
  33. tworz_naglowek_html('Strona główna');
  34.  
  35. wyswietl_menu_uzyt();
  36. tworz_stopke_html();
  37. ?>


funkcja loguj wygląda tak:
  1. <?php
  2. function loguj($login, $haslo)
  3. {
  4. $lacz = lacz_bd();
  5. if (!$lacz)
  6. return false;
  7.  
  8. $wynik = mysql_query(&#092;"select status_admin from urzednicy
  9.  where login_urzednika='$login' 
  10.  and haslo_urzednika=password('$haslo')&#092;");
  11.  
  12. if (!$wynik)
  13.  return false;
  14. if (mysql_num_rows($wynik)<1)
  15.  return false;
  16.  
  17. $status = mysql_result($wynik, 0, 0);
  18. if ($status == '1')
  19.  return 'admin';
  20. else
  21.  return 'zwykly';
  22. }
  23. ?>


Jeśli usunę drugi warunek w zapytaniu to bez hasła wyszukuje mi rekord ale jaki to wtedy ma sens. A podczas wpisywania hasło było szyfrowane ta samą metodą.
Może ktoś ma jakiś pomysł o co tu chodzi?
Go to the top of the page
+Quote Post
brachu
post 28.06.2005, 12:49:46
Post #2





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 13.04.2005

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


sprawdzilem u mnie to dziala... wiec to napewno nie jest kwestia zapytania!!! a teraz pytanie jak u Ciebie wyglada haslo_urzednika... czy ma wystarczajaca dlugosc?questionmark.gif bo jezeli jest to pole znakowe zakrotkie to tak sie bedzie dzialo.... jeszcze sprobowalbym wypisac zmienna $haslo i sprawdzic czy wszystko z nia OK ale wydaje mi sie, ze jest spoko... ewentualnie sprobuj md5 zamiast password - ale caly czas zwracaj uwage na rozmiar pola haslo_urzednika - musi byc o 1 wiekszy (jezeli dobrze pamietam) od liczby znakow w jakim koduje algorytm!!!

pozdrawiam


--------------------
www.tanieprogramy.edu.pl
www.zamkor.pl
Go to the top of the page
+Quote Post
SongoQ
post 28.06.2005, 15:13:56
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Wydaje mi sie ze jesli haslo przekroczy zakres to i tak funkcja password powinna uciag go do opowiedniej wielkosci, tak jak to jest przy md5.


--------------------
Go to the top of the page
+Quote Post
raqqos
post 29.06.2005, 12:40:33
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.06.2005
Skąd: Płock

Ostrzeżenie: (10%)
X----


Zmieniłem na funkcję md5 i jest OK! A swoją drogą chyba miałeś racje z tą wielkością pola haslo_urzednika (miało tylko 8 znaków). Znalazłem na forum mysqla, info że pod md5 pole hasla musi byc przynajmniej 60-znakowe. Przerobiłem i jest git:) Dzięki i pozdro!!!
Go to the top of the page
+Quote Post
SongoQ
post 29.06.2005, 14:08:07
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Znalazłem na forum mysqla, info że pod md5 pole hasla musi byc przynajmniej 60-znakowe.

Cos chyba nie tak, bo md5 to 32 znaki. Mozesz podac linka do tego posta? Chcialbym to przeczytac.


--------------------
Go to the top of the page
+Quote Post
raqqos
post 29.06.2005, 16:02:46
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.06.2005
Skąd: Płock

Ostrzeżenie: (10%)
X----


Sorry, źle odczytałem gościa. Pisze, że u niego to pole ma 60 znaków.biggrin.gif Tu masz link do tej stronki: http://dev.mysql.com/doc/mysql/en/encryption-functions.html
Pierwszy post.
Go to the top of the page
+Quote Post
SongoQ
post 29.06.2005, 16:09:15
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Czyli mialem racje.

Cytat
Calculates an MD5 128-bit checksum for the string. The value is returned as a binary string of 32 hex digits, or NULL if the argument was NULL. The return value can, for example, be used as a hash key.


--------------------
Go to the top of the page
+Quote Post
FiDO
post 29.06.2005, 18:08:14
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Ja tylko dodam, ze NIE POWINNO sie uzywac funkcji PASSWORD() w mysqlu.. ona jest uzywana wewnetrznie do hasel uzytkownikow, ale jest napisane, zeby jej nie uzywac w swoich aplikacjach.


--------------------
Brak czasu :/
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.06.2025 - 06:33