Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MD5 i hasła w bazie
primo
post 11.09.2004, 08:20:13
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


Witam,

zachciało mi się przerabiać skrypt, aby hasła w bazie były odczytywane poprzez funkcję MD5. W tym celu poprzez polecenie:

UPDATE `user` SET `userpassword` = MD5(`userpassword`) zmodyfikowałem hasła w bazie. Wziąłem się teraz za przerabianie skryptu i napotkałem problemy.

  1. <?php
  2. function auth_user($userid, $userpassword) {
  3.  global $default_dbname, $user_tablename;
  4.  
  5.  $link_id = db_connect($default_dbname);
  6.  $query = &#092;"SELECT username FROM $user_tablename 
  7.  WHERE userid =&#092;".addslashes($_POST['userid']).\"
  8.  AND userpassword = MD5(&#092;".$_POST['userpassword'].\")\";
  9.  
  10.  $result = mysql_query($query);
  11.  if(!mysql_num_rows($result)) return 0;
  12.  else {
  13. $query_data = mysql_fetch_row($result);
  14. return $query_data[0];
  15.  }
  16. }
  17. ?>


poprawiłem skrypt i zdawać by się mogło, że powinni działać, ale niestety ciągle wyskakuje, iż autoryzacja nieudana. Czy błąd tkwi w tej funkcji, widzi ktoś jakieś niedopatrzenie questionmark.gif
Proszę o pomoc, z góry dziękuję.

pozdrawiam


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
goped
post 11.09.2004, 08:50:28
Post #2





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 28.11.2003
Skąd: gliwice

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


dobra, wiem, ze moze nie powinienem pisac jezeli sie nie znam, bo na mysql sie wogole nie znam, ale tu wyglada podejrzanie

  1. <?php
  2.  
  3.  $query = &#092;"SELECT username FROM $user_tablename 
  4.  WHERE userid =&#092;".addslashes($_POST['userid']).\"
  5.  AND userpassword = MD5(&#092;".$_POST['userpassword'].\")\";
  6. ?>

jezeli sie przyjrzysz to md5 jest na czerwono, czyli nie uwazane jako funkcja, popatrz na userid. moze sie myle, ale moze powinno wygladac tak
  1. <?php
  2.  
  3.  $query = &#092;"SELECT username FROM $user_tablename 
  4.  WHERE userid =&#092;".addslashes($_POST['userid']).\"
  5.  AND userpassword =&#092;".MD5($_POST['userpassword']);
  6.  
  7. ?>

jezeli sie myle to sork, ale tak mi sie zdaje


--------------------
www.motorower.com.pl - kup sobie cos :]
Go to the top of the page
+Quote Post
primo
post 11.09.2004, 09:07:40
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


niestety to nie to, ale dzięki za dobre chęci winksmiley.jpg


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
JOHNY
post 11.09.2004, 09:27:29
Post #4





Grupa: Zarejestrowani
Postów: 297
Pomógł: 0
Dołączył: 17.01.2003
Skąd: Tarnów

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


Cytat(primo @ 2004-09-11 09:20:13)
  1. <?php
  2. function auth_user($userid, $userpassword) {
  3.    global $default_dbname, $user_tablename;
  4.  
  5.    $link_id = db_connect($default_dbname);
  6.    $query = &#092;"SELECT username FROM $user_tablename 
  7.                              WHERE userid =&#092;".addslashes($_POST['userid']).\"
  8.                              AND userpassword = MD5(&#092;".$_POST['userpassword'].\")\";
  9.  
  10.    $result = mysql_query($query);
  11.    if(!mysql_num_rows($result)) return 0;
  12.    else {
  13.       $query_data = mysql_fetch_row($result);
  14.       return $query_data[0];
  15.    }
  16. }
  17. ?>

  1. <?php
  2.  
  3. function auth_user($userid, $userpassword) {
  4.  global $default_dbname, $user_tablename;
  5.  
  6.  $link_id = db_connect($default_dbname);
  7.  $userpassword = md5(stripslashes($_POST['userpassword']));
  8.  $query = &#092;"SELECT username FROM $user_tablename 
  9.  WHERE userid =&#092;".addslashes($_POST['userid']).\"
  10.  AND userpassword = '$userpassword'&#092;";
  11.  
  12.  $result = mysql_query($query);
  13.  if(!mysql_num_rows($result)) return 0;
  14.  else {
  15. $query_data = mysql_fetch_row($result);
  16. return $query_data[0];
  17.  }
  18. }
  19. ?>
Go to the top of the page
+Quote Post
goped
post 11.09.2004, 09:43:37
Post #5





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 28.11.2003
Skąd: gliwice

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


a to tk moze byc?, tylkko z ciekawosci pytam


--------------------
www.motorower.com.pl - kup sobie cos :]
Go to the top of the page
+Quote Post
primo
post 11.09.2004, 10:19:20
Post #6





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


w wersji numer 1 pokazuje błąd w:
  1. WHERE userid =\".addslashes($_POST['userid']).\"


natomiast wersja numer 2 nadal niepoprawna autoryzacja.

Ten post edytował primo 11.09.2004, 10:20:42


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
goped
post 11.09.2004, 10:28:19
Post #7





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 28.11.2003
Skąd: gliwice

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


mozecie mi powiedziec jak to jest ze tak moze byc?
  1. <?php
  2.  
  3.  $query = &#092;"SELECT username FROM $user_tablename 
  4.  WHERE userid =&#092;".addslashes($_POST['userid']).\"
  5.  AND userpassword = MD5(&#092;".$_POST['userpassword'].\")\";
  6.  
  7. ?>

niemowie ze nie moze tylkoc chcialbym zrozumiec


--------------------
www.motorower.com.pl - kup sobie cos :]
Go to the top of the page
+Quote Post
primo
post 11.09.2004, 10:52:28
Post #8





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


według mnie nie powinno być tu błędu:

  1. <?php
  2. function auth_user($userid, $userpassword) {
  3.  global $default_dbname, $user_tablename;
  4.  
  5.  $link_id = db_connect($default_dbname);
  6.  $userid = $_POST['userid'];
  7.  $userpassword = $_POST['userpassword'];
  8.  $userpassword = md5($userpassword);
  9.  $query = &#092;"SELECT username FROM $user_tablename 
  10.  WHERE userid ='$userid'
  11.  AND userpassword = '$userpassword'&#092;";
  12.  
  13.  
  14.  $result = mysql_query($query);
  15.  if(!mysql_num_rows($result)) return 0;
  16.  else {
  17. $query_data = mysql_fetch_row($result);
  18. return $query_data[0];
  19.  }
  20. }
  21. ?>


zapytanie rozebrane na elementy pierwsze a nadal nie działa. Jeśli dobrze rozumiem to funkcja ta zwraca tylko dwie zmienne userid i userpassword i to jest zwracane w wywołaniach funkcji. O ile się mylę to proszę mnie poprawić.
Tablica $_POST jest tablicą superglobalną i nie trzeba jej oznaczać jako global ?
W takim razie co jest źle questionmark.gif


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
sf
post 11.09.2004, 10:59:00
Post #9





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


hm, wydaje mi sie, ze ostatnio byl podobny problem na forum... sprobuj dac tak :
userid=$userid and userpassword=$userpassword


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
bela
post 11.09.2004, 11:32:41
Post #10


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


  1. <?php
  2.  
  3.    $query = &#092;"SELECT username FROM $user_tablename 
  4.                              WHERE userid =&#092;".addslashes($_POST['userid']).\"
  5.                              AND userpassword = MD5('\".$_POST['userpassword'].\"')&#092;";
  6.  
  7. ?>


zobacz czy po dodaniu '' działa


--------------------
Go to the top of the page
+Quote Post
JOHNY
post 11.09.2004, 11:37:21
Post #11





Grupa: Zarejestrowani
Postów: 297
Pomógł: 0
Dołączył: 17.01.2003
Skąd: Tarnów

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


  1. <?php
  2.  
  3.    $query = &#092;"SELECT * FROM $user_tablename 
  4.                              WHERE userid ='$userid'
  5.                              AND userpassword = '$userpassword'&#092;";
  6.  
  7. ?>

to po pierwsze po drugie zobacz co ci zapisuje do sesji biggrin.gif

Ten post edytował JOHNY 11.09.2004, 11:39:24
Go to the top of the page
+Quote Post
primo
post 11.09.2004, 11:37:51
Post #12





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


niestety to nie wniosło nic nowego


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
Majdan
post 11.09.2004, 11:49:03
Post #13





Grupa: Zarejestrowani
Postów: 445
Pomógł: 0
Dołączył: 21.12.2003
Skąd: Tomaszów Lubelski

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


Ja tu widzę błąd innego typu, gdyż zmienne przekazujesz, a nie używasz ich w funkcji. Używasz zmiennych w zapytaniu z tablicy $_POST[]. Nie twierdzę, że to jest błąd, bo być może o to Ci chodziło, ale wygląda to dziwnie.

Nie zaszkodzą także cudzysłowy ", albo apostrofy ' w ciągach w zapytaniu.


--------------------
Go to the top of the page
+Quote Post
primo
post 11.09.2004, 12:34:19
Post #14





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


nie kapuję.

co ma wspólnego ta funkcja z tym, że później jest to przekazywane do sesji...

ale wygląda to tak:

  1. <?php
  2. if(!isset($userid)) {
  3.  login_form();
  4.  exit;
  5. }
  6. else {
  7.  session_register(&#092;"userid\", \"userpassword\");
  8.  $username = auth_user($userid, $userpassword);
  9.  if(!$username) {
  10. session_unregister(&#092;"userid\");
  11. session_unregister(&#092;"userpassword\");
  12. echo &#092;"Autoryzacja nieudana. \" .
  13.  &#092;"Musisz podać poprawny identyfikator użytkownika oraz hasło. \" .
  14.  &#092;"Jeszcze raz spóbuj się zalogować.<BR>n\";
  15. echo &#092;"<A HREF=\"$PHP_SELF\">Logowanie</A><BR>\";
  16. ?>


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
JOHNY
post 11.09.2004, 12:40:04
Post #15





Grupa: Zarejestrowani
Postów: 297
Pomógł: 0
Dołączył: 17.01.2003
Skąd: Tarnów

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


  1. <?
  2. require &#092;"config.php\";
  3. // zapisanie zmiennych do sesji
  4. $pass2 = md5(stripslashes($_POST['haslo']));
  5.  $query2 = &#092;"SELECT * FROM admin WHERE konto_nick='$nick' AND konto_pass='$pass2'\";
  6.  $wynik2 = mysql_query($query2);
  7.  while($row = mysql_fetch_array($wynik2)) {
  8.  $pass=$row['konto_pass'];
  9. }
  10. // check auth
  11. function auth_user($nick, $pass) {
  12. $pass = md5(stripslashes($_POST['haslo']));
  13.    $query = &#092;"SELECT * FROM admin WHERE konto_nick='$nick' AND konto_pass='$pass'\";
  14.    $wynik = mysql_query($query);
  15.  
  16. if (!mysql_num_rows($wynik)) return 0;
  17.   else {
  18.     $query_data = mysql_fetch_row($wynik);
  19.     return $query_data[0];
  20.       }
  21.    }
  22.  
  23.  function login_form() {
  24.  
  25. ?>
  26.  
  27.  <CENTER>
  28.     <FORM ACTION=\"index.php\" METHOD=\"POST\">
  29.     <TABLE width=\"184\">
  30.     <TR>
  31.     <TD width=\"86\" align=\"right\" class=\"tekst-black-bold\">UŻYTKOWNIK:</TD>
  32.     <TD width=\"86\"><INPUT TYPE=\"text\" NAME=\"nick\" SIZE=\"10\" class=\"pole\"></TD>
  33. </TR>
  34. <TR>
  35.     <TD align=\"right\" class=\"tekst-black-bold\">HASŁO:</TD>
  36.     <TD><INPUT TYPE=\"password\" NAME=\"haslo\" SIZE=\"10\" class=\"pole\"></TD>
  37. </TR>
  38. <TR>
  39.     <TD align=\"center\"><INPUT TYPE=\"submit\" VALUE=\"\" NAME=\"username\" class=\"zaloguj\"></TD>
  40.     <TD align=\"center\"><INPUT TYPE=\"reset\" VALUE=\"\" class=\"wyczysc\"></TD>
  41. </TR>
  42. </TABLE>
  43. </FORM></CENTER>
  44. <?
  45. }
  46.  
  47. if(!isset($_POST['nick']) AND !isset($_POST['pass'])) {
  48.   login_form();
  49.   exit;
  50. }
  51. else {
  52.   session_register(&#092;"nick\", \"pass\");
  53.   $username = auth_user($_SESSION['nick'], $_SESSION['pass']);
  54.   if(!$username) {
  55. session_unregister(&#092;"nick\");
  56. session_unregister(&#092;"pass\");
  57.     echo &#092;"<CENTER><div class=\"tekst-black-bold\">AUTORYZACJA NIEUDANA</div></CENTER>\";
  58.     exit;
  59.   } else
  60.    echo &#092;"<CENTER><div class=\"tekst-black-bold\"><span class=\"naglowek\">$nick</span> WITAMJ, W PANELU ADMINISTRACYJNYM</div></CENTER>\";
  61. }
  62.  
  63. ?>


Ja mam tak i u mnie działa smile.gif

Ten post edytował JOHNY 11.09.2004, 12:51:10
Go to the top of the page
+Quote Post
chfast
post 11.09.2004, 18:00:47
Post #16





Grupa: Zarejestrowani
Postów: 222
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Wrocław

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


To jeszcze ja spróbuje coś pomóc.
1. Dodaj sobie w skrypcie:
  1. <?php
  2.  echo 'userid: ', $_POST['userid'];
  3. echo ' userpassword: ', $_POST['userpassword'];
  4. echo ' md5: ', md5( $_POST['userpasswors'];
  5. ?>
i sprawdź czy php nie dodaje slashy do tych zmiennych.
2. Dodaj:
  1. <?php
  2. echo $query;
  3. ?>
żeby sprawdzić jak wygląda w rzeczywistości twoje zapytanie.
3. Sprawdź czy wpisy w bazie są poprawne.
4. Jeżeli userid nie jest typu całkowitego (integer) to wartość przekazywana w zapytaniu powinna być ujęta w cudzysłowy. Wartość userpassword też powinna być w cudzysłowiach.


--------------------
pozdrawiam, chfast
Go to the top of the page
+Quote Post
rogrog
post 11.09.2004, 19:51:04
Post #17





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

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


@goped: obydwie wersje zawierają poprawne odwołania do funkcji z tą różnicą, że:

wersja pierwsza wykorzystuje funkcję wbudowaną w MySql, czyli koduje dane na poziomie sqla

a Twoja wersja wykorzystuje funkcję phpowską


--------------------
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: 28.04.2024 - 17:20