Skrypt logowania, na ile bezpieczny?


(Marcin E Pc) #1

WItam!

Napisałem sobie klasę do logowania, ocencie na ile jest ona bezpieczna? To mój pierwszy taki skrypt.

class logowanie 

  {

	function zaloguj($login, $password)

	  {

	   include('../database/config_db.php');

	   $db = new mysqli("$dbHost", "$dbUser", "$dbPass", "$dbName");

	   if (mysqli_connect_errno() !=0)

		{

		 echo "Połączenie z bazą danych nie powiodło się, kod błędu: ".mysqli_connect_error();

		 exit;

		}

	   if (empty($login)!=0 || empty($password)!=0)

	   {

		   echo "Błędne hasło lub login";

		   exit;

	   }

		$zapytanie = "select pass from users where name='".$login."'";

		$wynik = $db->query($zapytanie);

		$ile = $wynik->num_rows;

		if ($ile != 1)

		{

		 echo "Podany użytkownik nie istnieje w bazie danych";

		 exit;

		}

		else 

		{

		 $wiersz = $wynik->fetch_assoc();

		 $dbPassword = $wiersz['pass'];

		 $password = md5($password);

		}

	   if($password===$dbPassword)

	   {

		 $_SESSION['password']=$password;

		 $_SESSION['user']=$login;

		 return 1;

	   }

	   else

	   {

		   echo "Nieprawidłowe hasło";

		   return 0;

	   }

	  }

	function wyloguj()

	{

      session_destroy();

	  return 1;

	}

	function sprawdzUz()

	{

	   session_start();

	  if(empty($_SESSION['password']) == 1 || empty($_SESSION['user'])== 1 )

	  {

		return 0;

		exit;

	  }

	  include('database/config_db.php');

	  $db = new mysqli("$dbHost", "$dbUser", "$dbPass", "$dbName");

	  if (mysqli_connect_errno() !=0)

		{

		 echo "Połączenie z bazą danych nie powiodło się, kod błędu: ".mysqli_connect_error();

		 exit;

		}

	  $zapytanie = "select name, pass from users where name='".$_SESSION['user']."'";

	  $wynik = $db->query($zapytanie);

	  $ile = $wynik->num_rows;

	  if ($ile != 1)

		{

		 echo "Podany użytkownik nie istnieje w bazie danych";

		}

	  else 

		{

		 $wiersz = $wynik->fetch_assoc();

		 $dbLogin = $wiersz['name'];

		 $dbPassword = $wiersz['pass'];

		}

	 if($_SESSION['password']===$dbPassword && $_SESSION['user']===$dbLogin)

	   {

		   return 1;

	   }

	   else 

	   {

		   return 0;

	   }

	}

  }

?>

(Airborn) #2

po co te cudzysłowy?

do ładowania innych obiektów mógłbyś korzystać z np. spl_autoload_register();

jak już robisz return to możesz być pewien, że dalsza część się nie wykona, więc exit jest zbyteczny

taki szczegół, ale po co wyciągasz name jak już je masz?:>

ogólnie, to mi się nie podoba, jest mało OOP, widać, żę dopiero zaczynasz i nie masz za bardzo pomysłu jak to ugryźć

odnośnie samego bezpieczeństwa, to poczytaj o soleniu haseł chociażby jeszcze