Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]weryfikacja użytkownika i szyfrowanie
Forum PHP.pl > Forum > Przedszkole
pablo_83
Mam taki problem jak zrobić żeby skrypt przeszukiwał całą tabele w poszukiwaniu danego użytkownika (narazie sprawdza tylko pierwszą kolumne) nie wiem jak zrobić jakąś pentelke czy coś.
A drugie to jak odszyfrować użytkownika i hasło z tabeli żeby mogło zostać porównane, używam sha1 do szyfrowania.
W komentarzu na dole sposób szyfrowania jest


  1. <?php
  2.  
  3. $login = $_POST['login'];
  4. $passw = $_POST['haslo'];
  5.  
  6.  
  7. $con = mysql_connect("mysql3.yoyo.pl", "*****", "*****");
  8. mysql_select_db("*****");
  9. mysql_query("SET NAMES 'utf8'");
  10. mysql_query("SET collation_connection = utf8_polish_ci");
  11.  
  12.            
  13. if  (!$con)
  14.        {
  15.                echo ("Nie mogę połączyć z bazą");
  16.        }
  17.          
  18.        else
  19.        {
  20.            
  21.            //echo ("Użytkownik zalogowany<br  />");
  22.            $zapytanie = ("SELECT Login, Haslo FROM Users");
  23.            $wynik = mysql_query($zapytanie);
  24.            //$ile = mysql_num_rows($wynik);
  25.            $dane = mysql_fetch_array($wynik);
  26.            
  27.            
  28.            
  29.            if($login ==''.$dane['Login'].'' && $passw ==''.$dane['Haslo'].'')
  30.            {
  31.            
  32.                $zapytanie1 = ("SELECT * FROM Filtry ORDER By IdFiltr ASC");
  33.               $wynik1 = mysql_query($zapytanie1);
  34.               $row = mysql_fetch_array($wynik1);
  35.      
  36.         echo
  37.        
  38.        
  39.         'IdFiltru - '.$row['IdFiltr'].'<br />
  40.         Producent - '.$row['Producent'].'<br />
  41.         Oznakowanie - '.$row['Oznakowanie'].'<br />
  42.         Samochód - '.$row['Samochód'].'<br />
  43.         Pojemność - '.$row['Pojemność'].'<br />
  44.         Rokcznik samoch - '.$row['Rok'].'<br />
  45.         Typ - '.$row['Typ'].'<br />';
  46.                }
  47.                else echo 'Nie ma takiego użytkownika w bazie';
  48.                
  49.            }
  50.        
  51.            
  52.            mysql_close() or die(mysql_error());
  53.  
  54.  
  55. ?>
  56.  
  57. /*$login = $_POST['login'];
  58. $passw = $_POST['haslo'];
  59.  
  60.  
  61. $pas =sha1($passw);
  62. $log =sha1($login);
  63. ...
  64. ...
  65. ...
  66. $wynik = mysql_query("INSERT INTO Users (Login, Haslo )
  67.            VALUES ('$log', '$pas')")
  68.            or die(mysql_error());*/
ddiceman
sha1 to nie funkcja szyfrujaca a funkcja skrotu (dwie zupelnie rozne sprawy). Jest to funkcja jednokierunkowa, zatem raz wygenerowanej sumy nie da sie rozszyfrowac. Mozna jedynie porownywac, czy sha1(haslo_wzorcowe) == sha1(haslo_testowane), czyli
  1. <?php
  2. //tutaj trzeba zabezpieczyc dane przeslane $_POSTem
  3. $result = mysql_query('SELECT login FROM users WHERE login = "'.$_POST['login'].'" AND haslo = "'.sha1($_POST['haslo']).'" LIMIT 1;');
  4. if(mysql_numrows($result) > 1){
  5.  //zalogowany
  6. }
  7. else{
  8. // blad logowania
  9. }
  10. ?>
guilty82
  1. <?php
  2. $zapytanie = ("SELECT Login, Haslo FROM Users WHERE Login='".sha1($login)."' AND Haslo='".sha1($passw)."'");
  3. ?>


// EDIT
literowka
Savage.Mephisto
Poprawiłem nieco:

  1. <?php
  2.  
  3. $login = $_POST['login'];
  4. $passw = $_POST['haslo'];
  5.  
  6. $con = mysql_connect("mysql3.yoyo.pl", "*****", "*****");
  7. mysql_select_db("*****");
  8. mysql_query("SET NAMES 'utf8'");
  9. mysql_query("SET collation_connection = utf8_polish_ci");
  10.  
  11.            
  12. if  (!$con)
  13.        {
  14.                echo ("Nie mogę połączyć z bazą");
  15.        }
  16.          
  17.        else
  18.        {
  19.  
  20.            $zapytanie = ("SELECT Login, Haslo FROM Users WHERE Login='.sha1($login).' AND Haslo='.sha1($passw).' LIMIT 1");
  21.            $wynik = mysql_query($zapytanie);
  22.    
  23.            if (mysql_numrows($wynik) == 1)
  24.            {
  25.            
  26.               $zapytanie1 = ("SELECT * FROM Filtry ORDER By IdFiltr ASC");
  27.               $wynik1 = mysql_query($zapytanie1);
  28.               $row = mysql_fetch_array($wynik1);
  29.      
  30.         echo
  31.          
  32.         'IdFiltru - '.$row['IdFiltr'].'
  33.  
  34.         Producent - '.$row['Producent'].'
  35.  
  36.         Oznakowanie - '.$row['Oznakowanie'].'
  37.  
  38.         Samochód - '.$row['Samochód'].'
  39.  
  40.         Pojemność - '.$row['Pojemność'].'
  41.  
  42.         Rokcznik samoch - '.$row['Rok'].'
  43.  
  44.         Typ - '.$row['Typ'].'';
  45.  
  46.                }
  47.  
  48.                else echo 'Nie ma takiego użytkownika w bazie';
  49.                
  50.            }
  51.        
  52.           mysql_close() or die(mysql_error());
  53.  
  54. ?>
peter13135
ale poco login ~"szyfrować" tą funkcją sha1 ?
pablo_83
to czy login bedzie szyfrowany czy nie nie ma wpływu na działanie kodu....

zmieniłem sha1 na md5 i szyfruje tylko hasło.

w kodzie który kolega zamieścił wyżej wywala mi błąd Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/sites/yoyo.pl/p/a/pablo83/lista6/lista_6.php on line 34

czy w $zapytaniu SELECT mogę zmienić to sha1 na md5 ? bo czepia mi się że nie prawidłowy string daje :

$zapytanie = ('SELECT Login, Haslo FROM Users WHERE Login = '.$login.' AND Haslo ='.md5($passw).' LIMIT 1');

może tak być?

no i ta instrukcja nie przszukuje całej tabeli, wprowadziłem nie zaszyfrowane dane np na pozycji 5 i nie znajduje takiego użytkownika

edit 1

oczywiście pomyłka tak miało być .md5($passw).
erix
  1. <?php
  2. md5(.$passw.)
  3. ?>

WTF?
pablo_83
ok rozumiem że po poprawieniu tego może być, tylko nadal nie działa przeszukanie tabeli w celu znalezienia danego użytkownika i hasła ....

jak to naprawic
erix
Pokaż, jak poprawiłeś...
pablo_83
tak jak w Edit 1 wyżej

przynajmniej nie wyświetla żadnego błedu T-string ale nadal pozostaje ten co w poscie wyżej mysql_num_rows()
ciuchy
Spróbuj tego smile.gif jak nie będzie działać to nie wiem smile.gif

  1. <?php
  2.  
  3. $login = $_POST['login'];
  4. $passw = $_POST['haslo'];
  5.  
  6. $con = mysql_connect("mysql3.yoyo.pl", "*****", "*****");
  7. mysql_select_db("*****");
  8. mysql_query("SET NAMES 'utf8'");
  9. mysql_query("SET collation_connection = utf8_polish_ci");
  10.  
  11.          
  12. if  (!$con)
  13.       {
  14.               echo ("Nie mogę połączyć z bazą");
  15.       }
  16.        
  17.       else
  18.       {
  19.  
  20.           $zapytanie = ("SELECT Login, Haslo FROM Users WHERE Login='.sha1($login).' AND Haslo='.sha1($passw).' LIMIT 1");
  21.           $wynik = mysql_query($zapytanie);
  22.  
  23.          
  24.           if (mysql_numrows($wynik) == 1)
  25.           {
  26.          
  27.              $zapytanie1 = ("SELECT * FROM Filtry ORDER By IdFiltr ASC");
  28.              $wynik1 = mysql_query($zapytanie1);
  29. if($ile>0)
  30.   {
  31.   for($i=0; $i<$ile; $i++)
  32.   {
  33.              $row = mysql_fetch_array($wynik1);
  34.    
  35.        echo
  36.        
  37.        'IdFiltru - '.$row['IdFiltr'].'
  38.  
  39.        Producent - '.$row['Producent'].'
  40.  
  41.        Oznakowanie - '.$row['Oznakowanie'].'
  42.  
  43.        Samochód - '.$row['Samochód'].'
  44.  
  45.        Pojemność - '.$row['Pojemność'].'
  46.  
  47.        Rokcznik samoch - '.$row['Rok'].'
  48.  
  49.        Typ - '.$row['Typ'].'';
  50.        }
  51.           }
  52.            else {echo 'Nie ma zadnych danych w bazie';}
  53.           }
  54.               else echo 'Nie ma takiego użytkownika w bazie';
  55.              
  56.           }
  57.      
  58.          mysql_close() or die(mysql_error());
  59.  
  60. ?>
Fifi209
CO TO JEST?!
Kod
$zapytanie = ("SELECT Login, Haslo FROM Users WHERE Login='.sha1($login).' AND Haslo='.sha1($passw).' LIMIT 1");


loginów użytkowników chyba jako hashe sha1 nie trzymasz?!

W dodatku używaj ' a nie "

Kod
$zapytanie = ('SELECT Login, Haslo FROM Users WHERE Login="'.$login.'" AND Haslo="'.sha1($passw).'" LIMIT 1');


O SQLi chyba nie muszę wspominać?
$login = admin" /*
pablo_83
szyfrowanie jest zmienione na md5 tak jak pisałem w poście wyżej..., po za tym login nie ma wpływu na poprawnośc kodu nie ważne jak będzie trzymany (czy szyfrowany czy nie) - nie czepiajcie się szczegółów które nie decydują o funkcjonalności tylko są błędami merytorycznymi...

teraz login jest normalnie trzymany w bazie jako char a haslo szyfrowane md5

a o co chodzi z tym

$login = admin" /* bo tego kolmpletnie nie czaje questionmark.gif
Fifi209
Google fraza: sql injection

Zapraszam do poczytania. haha.gif
pablo_83
no tak to luka w zabezpieczeniach... ale nie o to chodzi...
kod zwraca zwykły błąd składni ...?

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/sites/yoyo.pl/p/a/pablo83/lista6/lista_6.php on line 86
Nie ma takiego użytkownika w bazie

i nie przeszukuje tabeli w celu sprawdzenia czy dany użytkownik istnieje, najpierw chciałbym rozwiązać ten problem a potem zająć się udoskonalaniem skryptu
Fifi209
A teraz pokaż swój cały przerobiony kod...
pablo_83
ja już nie mam pojęcia gdzie szukać błędu i dlaczego cały czas czepia mi się tego mysql_num_rows()...
jest szansa że ktoś coś znajdzie....? jak to naprawić
  1. <?php
  2.  
  3. $login = $_POST['login'];
  4. $passw = $_POST['haslo'];
  5.  
  6. $con = mysql_connect("mysql3.yoyo.pl", "***", "***");
  7. mysql_select_db("*****");
  8. mysql_query("SET NAMES 'utf8'");
  9. mysql_query("SET collation_connection = utf8_polish_ci");
  10.  
  11.        
  12. if  (!$con)
  13.      {
  14.              echo ("Nie mogę połączyć z bazą");
  15.      }
  16.      
  17.      else
  18.      {
  19.  
  20.          $zapytanie = ('SELECT Login, Haslo FROM Users WHERE Login= '.$login.' AND Haslo='.md5($passw).' LIMIT 1');
  21.          $wynik = mysql_query($zapytanie);
  22.  
  23.        
  24.          if (mysql_num_rows($wynik) == 1)
  25.          {
  26.        
  27.             $zapytanie1 = ("SELECT * FROM Filtry ORDER By IdFiltr ASC");
  28.             $wynik1 = mysql_query($zapytanie1);
  29. if($ile>0)
  30.  {
  31.  for($i=0; $i<$ile; $i++)
  32.  {
  33.             $row = mysql_fetch_array($wynik1);
  34.  
  35.       echo
  36.      
  37.       'IdFiltru - '.$row['IdFiltr'].'
  38.  
  39.       Producent - '.$row['Producent'].'
  40.  
  41.       Oznakowanie - '.$row['Oznakowanie'].'
  42.  
  43.       Samochód - '.$row['Samochód'].'
  44.  
  45.       Pojemność - '.$row['Pojemność'].'
  46.  
  47.       Rokcznik samoch - '.$row['Rok'].'
  48.  
  49.       Typ - '.$row['Typ'].'';
  50.       }
  51.          }
  52.           else {echo 'Nie ma zadnych danych w bazie';}
  53.          }
  54.              else echo 'Nie ma takiego użytkownika w bazie';
  55.            
  56.          }
  57.    
  58.         mysql_close() or die(mysql_error());
  59.  
  60. ?>
pgrzelka
  1. <?php
  2. $passw = md5($passw);  // raz piszesz o sha1, raz o md5, zdecyduj się ;)
  3. $zapytanie = ("SELECT Login, Haslo FROM Users WHERE Login= '$login' AND Haslo='$passw' LIMIT 1");
  4. ?>


jak nie zadziałą to po tym
$wynik = mysql_query($zapytanie);
daj
echo mysql_error();
pablo_83
dzięki wszystkim za pomoc .

katowałem się z tym dwa dni ale w końcu rozwiązanie znalazłem biggrin.gif działa a oto kod. Jak ktoś zauważy jakieś błędy merytoryczne itp proszę o info .

  1. <?php
  2.  
  3.  
  4. $con = mysql_connect("***", "db772113", "****");
  5. mysql_select_db("*****");
  6. mysql_query("SET NAMES 'utf8'");
  7. mysql_query("SET collation_connection = utf8_polish_ci");
  8.  
  9.        
  10. if  (!$con)
  11.      {
  12.              echo ("Nie mogę połączyć z bazą");
  13.      }
  14.      
  15.      else
  16.      {    $login = $_POST['login'];
  17.            $passw = $_POST['haslo'];
  18.              $pas = md5($passw);
  19.          
  20.             $zapytanie = "SELECT Login, Haslo FROM Users WHERE Login = '$login' AND Haslo = '$pas' LIMIT 1";
  21.          $wynik = mysql_query($zapytanie);
  22.                 echo mysql_error();
  23.          $dane = mysql_fetch_array($wynik);
  24.            
  25.             if($login ==''.$dane['Login'].'' && $passw ==''.$dane['Haslo'].'')
  26.          {
  27.        
  28.                
  29.            
  30.             $zapytanie1 = ("SELECT * FROM Filtry ORDER By IdFiltr ASC");
  31.             $wynik1 = mysql_query($zapytanie1);
  32.                 $ile = mysql_num_rows($wynik1) or die(mysql_error());
  33. if($ile>0)
  34.  {
  35.  for($i=0; $i<$ile; $i++)
  36.  {
  37.             $row = mysql_fetch_array($wynik1);
  38.  
  39.       echo
  40.      
  41.       'IdFiltru - '.$row['IdFiltr'].'
  42.  
  43.       Producent - '.$row['Producent'].'
  44.  
  45.       Oznakowanie - '.$row['Oznakowanie'].'
  46.  
  47.       Samochód - '.$row['Samochód'].'
  48.  
  49.       Pojemność - '.$row['Pojemność'].'
  50.  
  51.       Rokcznik samoch - '.$row['Rok'].'
  52.  
  53.       Typ - '.$row['Typ'].'';
  54.       }
  55.          }
  56.           else {echo 'Nie ma zadnych danych w bazie';}
  57.          }
  58.              else echo 'Nie ma takiego użytkownika w bazie';
  59.            
  60.          }
  61.    
  62.         mysql_close() or die(mysql_error());
  63.  
  64. ?>
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.