• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Hasło w md5 a login.php

Object Storage Arubacloud
+5 głosów
3,009 wizyt
pytanie zadane 6 kwietnia 2015 w PHP przez niezalogowany
otwarte ponownie 9 kwietnia 2015

Edit: Wszelkie rozwiązania co do szyfrowania MD5 znajdziecie w komentarzach poniżej (szczególnie na końcu).

 

Mam takie coś: 

<?php

	session_start();
	
	if((!isset($_POST['login'])) || (!isset($_POST['password'])))
	{
		header("Location: index.php");
		exit();
	}
	
	require_once "includes/dbconnect.php";

	$connect = @new mysqli($host, $db_user, $db_password, $db_name); //otwieranie polaczenia z baza danych
	
	if ($connect->connect_errno!=0)
	{
		echo "Error: ".$connect0->connect_errno;
	}
	else 
	{
		$login = $_POST['login'];
		$password = md5($_POST['password']);
		
		
		$login = htmlentities($login, ENT_QUOTES, "UTF-8"); //anty-wstrzykiwanie sql
		
		
		$sql = "SELECT * FROM users WHERE login='$login' AND password='$password'";
		/*$result = $connect->query("SELECT * FROM users WHERE password = '$password'");
		*      if(!$result) 
		*      {
	    * 	      echo 'Nie można uruchomić zapytania: ' . mysql_error();
		*	      exit;
		*      }
		*       $row = mysql_fetch_row($result);
        *
		*       echo $row[0]; // 42
		*       echo $row[1];
        */
		if($result = @$connect->query(
		sprintf("SELECT * FROM users WHERE login='%s' AND password='%s'", 			//anty-wstrzykiwanie sql
		mysqli_real_escape_string($connect,$login),									//anty-wstrzykiwanie sql
		mysqli_real_escape_string($connect,$password))))							//anty-wstrzykiwanie sql
		{
			$number_users = $result->num_rows;
			if($number_users>0)
			{
				$_SESSION['loggedin'] = true;
				
				$row = $result->fetch_assoc();
				$_SESSION['id'] = $row['id'];
				$_SESSION['user'] = $row['login'];
				
				unset($_SESSION['blad']);
				$result->close();
				header('Location: index.php');
			}
			else
			{
				$_SESSION['blad']='<span class = "error">Wrong login or password!</span>';
				header('Location: index.php');
			}
		}
		$connect->close(); //zamykanie polaczenia (MUSI BYC W ELSIE, BO POZA NIM WYGENEROWALOBY OSTRZERZENIE)
	}
?>

W bazie hasła są zaszyfrowane w md5. Przy podawaniu hasła i loginu w systemie logowania... Nic się nie dzieje.

Jak mam pobrać dane z bazy, które są zaszyfrowane w md5?

// Mam jeszcze dodatkowo pobrać informacje z bazy danych typu "SELECT * FROM ..."?

4 odpowiedzi

0 głosów
odpowiedź 6 kwietnia 2015 przez Misiek Mądrala (5,300 p.)
Żeby się zalogować to musisz pobrać z bazy login oraz hasło aby sprawdzić czy podane parametry przy logowaniu są zgodne ze sobą.
0 głosów
odpowiedź 6 kwietnia 2015 przez krecik1334 Maniak (58,390 p.)
Potrzebujesz loginu, hasła oraz linii kodu odpowiadających za ich porównanie, dopiero wtedy się zalogujesz.
0 głosów
odpowiedź 6 kwietnia 2015 przez Wirus Stary wyjadacz (14,000 p.)

W indexie.php/html masz takie coś

<form method = "POST" action = "login.php"><input type = "password" name = "password"/>

?? Jeśli to hasło poszukujesz z bazy danych np:

SELECT 'password' FROM 'users' WHERE 'pass' = '$psw'

0 głosów
odpowiedź 6 kwietnia 2015 przez Qhoros Mądrala (7,110 p.)
edycja 6 kwietnia 2015 przez Qhoros

Szyfrowanie : $hash = crypt($pass);

Deszyfrowanie

if ($_POST[login_submit])
{
	// pobieranie danych z formularza
	$log = $_POST[login_login];
	$pas = $_POST[login_password];

	// sprawdzanie czy dane się zgadzają i przekierowanie użytkownika
	$zapytanie_o_uzytkownia = mysql_query("SELECT name, mail, password from users where mail='$log' or name='$log'");
		
    if(mysql_num_rows($zapytanie_o_uzytkownia) > 0) 
	{
	    while($r = mysql_fetch_assoc($zapytanie_o_uzytkownia)) 
	    {
	    	//echo $r['mail'];
	    	//echo $r['password'];

	    	if ($r['password'] == crypt($pas, $r['password'])) 
				OK, PRZEKIEROWANIE DALSZEJ PRACY
	    	else
	    		ERROR BRAK DOSTEPU
        }
	}
	else
	   ERROR BRAK DOSTEPU
}
else
   ERROR BRAK DOSTĘPU

 

komentarz 7 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
A ten do porówania z bazy? Z phpMyAdmin od użytkownika, na którego się logujesz? Miały być dwa hashe...
komentarz 7 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
Nie edytuj proszę postów tylko pisz pod odpowiedziami - czasem trudno się zorientować co zrobiłeś.

Przyjrzyj się tym hashom - czy przypadkiem wszystko jest ok? Oba hashe są identyczne? No nie... nie znajduje ich... Powiem Ci więcej - zapomniałeś jakie hasło podałeś przy rejestracji i klepiesz teraz "1" zamiast "x" :P
komentarz 7 kwietnia 2015 przez niezalogowany

https://www.youtube.com/watch?v=BNsrK6P9QvI <--- Taka moja reakcja

 <---Taka Twoja reakcja

 

Dziękować strasznie za cierpliwość! Bóg w Ci dzieciach wynagrodzi za tą pomoc!

komentarz 7 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)

Najważniejsze, że się udało :) Reakcja moja zupełnie inna - poszedłem sobie zrobić kolację :)

Dobra - teraz już widzisz jak to działa. MD5 nie jest bezpieczny - Twoje hasła odczytałem w ciągu 1 sekundy wbijając je w google. Chcesz mieć lepszy algorytm? Spróbuj sobie np. Czegos takiego:

md5( md5( 'fac2d1' . $password) . '2fce9a');

 

Tylko pamiętaj, aby tą samą metodą hashować hasło przy rejestracji i logowaniu (czyli musisz na nowo zresetować wszystkie hasła). To co Ci podałem to tzw. sól (prosty przykład) - gdybyś tak zhashował hasło już bym Ci nie powiedział co masz wcisnąć aby się zalogować. 

Jedna uwaga na przyszłość - jak coś nie działa zawsze używaj var_dump() lub print_r() aby zobaczyć co zawiera zmienna i analizuj ręcznie to co wprowadzasz i to co otrzymujesz. Funckja die() której użyłem to to samo, co Mirosław używał u siebie jako exit() - funckje te mogą działać bez parametrów lub z parametrem - wtedy działają jak echo() i zatrzymują skrypt. 

 

Nie używaj @ przy funkcjach - pozbawiają Cię informacji o ewentualnych błędach. W wersji aplikacji, którą wystawiasz do sieci i tak zazwyczaj wyłącza się wyświetlanie błędów w całości ze względów bezpieczeństwa. 

 

P.S.

Dzieci-dzeciami - jak może niech zdrowie da, w tej chwili mam 38st :)

komentarz 9 kwietnia 2015 przez niezalogowany
Odnośnie var_dump() -> dzięki Tobie wykrywanie błędów jest o wiele łatwiejsze i co więcej, przyjemniejsze bo odrazu widzisz jaki to błąd, jeśli trafi się w sedno :)

Co do szyfrowania md5 - prawda, poczytałem sobie co nieco o bezpieczeństwie i zaimplementowanie już takiego ultra porządnego algorytmu przerosło mnie, więc na pewno wrócę do tego tematu w przyszłości!

Podobne pytania

0 głosów
2 odpowiedzi 497 wizyt
0 głosów
3 odpowiedzi 848 wizyt
pytanie zadane 5 czerwca 2015 w PHP przez intoksynator Gaduła (3,450 p.)
+1 głos
2 odpowiedzi 247 wizyt
pytanie zadane 11 kwietnia 2018 w PHP przez Neronys Bywalec (2,090 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...