7.3. Skrypt logowania - szyfrowanie md5.

Do tej pory wysyłaliśmy do bazy oraz przechowywaliśmy w niej hasło w formie jawnej. Zmienimy tę sytuację i zaszyfrujemy je funkcją md5. Nie jest to najbezpieczniejszy sposób ale chcę jedynie pokazać zasadę postępowania z hasłami.

Najpierw w pliku logowanie_1.php zmienimy własność formularza action na "logowanie_3_1.php"

Listing 7.3.1. Fragment pliku logowanie_1.php

<form method="post" action="logowanie_3_1.php">

Następnie w bazie danych edytujemy wiersz w tabeli uzytkownicy. W polu haslo wybieramy funkcję md5 i zatwierdzamy zmianę. Wartość wpisana w pole haslo powinna być taka: 21232f297a57a5a743894a0e4a801fc3.

Kolejnym krokiem jest stworzenie pliku logowanie_3_1.php, w którym dopiszemy kod szyfrujący hasło oraz dodamy funkcje addslashes() oraz trim(). Poniżej listing całego pliku logowanie_3_1.php

Listing 7.3.2. Plik logowanie_3_1.php

<HTML>
    <HEAD>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <TITLE>Logowanie</TITLE>
	</HEAD>
	
<BODY>
<div style='text-align:center; width:500px; background: #FF6633; margin:auto;'>

<?php
//Odbieramy zmienne z formularza za pomocą metody POST
$login=$_POST['login'];
$haslo=$_POST['haslo'];
// Funkcja trim() usuwa znaki odstępu ("białe miejsca" ang. whitespace)
//z początku oraz końca ciągu znaków.
$login = trim($login);
$haslo = trim($haslo);
//Sprawdzamy czy uzytkownik wypełnił pole "Login", jeżeli pole jest puste to wyświetlany jest komunikat:
if($login=='') 
		echo"<div>
		<p>Nie można zalogować się na konto, proszę podać <a href='logowanie_1.php'>login</a>.</p>
		</div>";
//Sprawdzamy czy uzytkownik wypełnił pole "Hasło"
if($haslo=='')
	echo"<div>
	<p>Nie można się zalogować na konto, proszę podać <a href='logowanie_1.php'>hasło</a>.</p>
	</div>";
//Łączymy się z bazą danych funkcją mysqli_connect
$link = mysqli_connect(localhost, root,'', baranski);
if(!$link){echo"Błąd: ". mysqli_connect_errno()." ".mysqli_connect_error();}
mysqli_query($link, "SET NAMES 'utf8'");	//ustawienie polskich znaków
// Funkcja addslashes() dodaje ukośniki do ciągów tekstowych w celu zmiany ich znaczenia.
//Dokładny opis np. tu: http://funkcje.net/view/3/1/270/
$login = addslashes($login);
$result = mysqli_query($link, "SELECT * FROM uzytkownicy WHERE login='$login'");

// Funkcja mysqli_fetch_array() zapisuje wiersz wyniku w tablicy,
// w której elementami są wszystkie pola z wiersza bazy danych 
// gdzie login jest taki sam jaki podano w formularzu. 
$user = mysqli_fetch_array($result);

//Jeżeli zmienna $user jest pusta, czyli w bazie danych nie było użytkownika o podanym loginie
//to  zamykamy połączenie z bazą danych oraz wyświetlamy komunikat o błędzie:
if(!$user)
{
	// Funkcja mysqli_close() zamyka połączenie z bazą danych MySQl.
	mysqli_close($link);
	echo "<p>Błędny login. <a href='logowanie_1.php'>Zaloguj się</a></p>";
}
else 
{									// Jeżeli login był w bazie:
	$zaszyfrowane = md5($haslo); 	// - szyfrujemy hasło funkcją md5
	if($user['haslo']==$zaszyfrowane)// - sprawdzamy czy hasło jest takie samo jak hasło zapisane w bazie
	{								// jeżeli tak - wyświetlamy zawartość strony dostępną
									// dla zalogowanych użytkowników
		echo"<p>
			<h1>To jest zawartość strony widoczna po zalogowaniu</h1>
			<h3>Zalogowany użytkownik to: {$user['login']}</h3>
			</p>";
	}
	else						//jeżeli hasło jest inne - zamykamy połączenie z bazą oraz wyświetlamy komunikat
	{
		mysqli_close($link);
		echo  "<p>Błędne hasło. <a href='logowanie_1.php'>Zaloguj się</a></p>";
	}
}
?>
</div>
					
</BODY>
</HTML>