Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Logowanie
Forum PHP.pl > Forum > Przedszkole
Johnas
Witam. Czy ten kod jest bezpieczny? Jak nie to jak można go zaatakować i jak zabezpieczyć sie przed tym?

  1. if ($_POST['login']) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  2.  
  3.  
  4. $tabela = 'users'; // zdefiniowanie tabeli MySQL
  5.  
  6. $login = mb_strtolower($_POST["login"]);
  7. $haslo = $_POST["pass"];
  8.  
  9. $haslo = sha1($haslo); // szyfrowanie podanego hasła
  10.  
  11.  
  12. // jeżeli wszystko jest dobrze, użytkownik się loguje
  13. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  14. login='$login' and password='$haslo'");
  15.  
  16. if (mysql_num_rows($wynik) == 1) {
  17. $informacja = mysql_fetch_array($wynik);
  18. $_SESSION["login"] = $informacja["login"];
  19. $_SESSION["id"] = $informacja["id"];
  20.  
  21.  
  22. header('Location: index.php');
  23. } else {
  24. echo '<div style="position:relative; width: 200px; top:80px; left:100px;"><font color="red">Nie poprawny login lub hasło!</font></div>';
  25. }
  26.  
  27. }
lobopol
Nie nie jest bezpieczny pozwala na sql injection
nie
  1. if ($_POST['login'])

a
  1. if (isset($_POST['login'],$_POST["pass"]))


W zapytaniu dodaj limit w końcu oczekujesz jednego wyniku:
  1. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  2. login='$login' and password='$haslo'" LIMIT 1);


  1. $login = mb_strtolower($_POST["login"]);
  2. $haslo = $_POST["pass"];

Nie wiem w jakim celu zmniejszasz tekst, ale powinno być raczej:
  1. $login = mysql_real_escape_string(mb_strtolower((string)$_POST["login"]));
  2. $haslo = (string)$_POST["pass"];


Jeżeli korzystasz z sha1 wypadało by dodać sól, a jeszcze lepiej używać innego hashowania np. funkcja crypt czy hash
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.