Implementacija sigurnog sustava za prijavu korisnika u PHP blogu

Implementacija sigurnog sustava za prijavu korisnika u PHP blogu

Izrada vlastitog sustava za prijavu korisnika (login sustav) predstavlja jedan od ključnih koraka u razvoju bilo koje dinamičke web aplikacije. U ovom ćemo vodiču proći kroz proces implementacije osnovnog mehanizma provjere identiteta za vaš PHP blog. Nadovezujući se na prethodne dijelove gdje smo uspostavili bazu i osnovnu strukturu, sada ćemo se fokusirati na stvaranje tablice korisnika, izradu HTML forme za prijavu, validaciju unosa te konačnu provjeru vjerodajnica u bazi podataka.

Priprema baze podataka za korisničke račune

Prije nego što PHP kod može provjeriti tko se pokušava prijaviti, moramo imati mjesto gdje ćemo pohraniti podatke o korisnicima. U našem slučaju, koristit ćemo MySQL bazu podataka. Potrebno je kreirati tablicu pod nazivom users koja će sadržavati jedinstveni identifikator, korisničko ime i lozinku. Iako u produkcijskim okruženjima uvijek treba koristiti napredne metode enkripcije poput password_hash(), za potrebe učenja i razumijevanja osnovne logike, ovdje ćemo raditi s jednostavnim zapisima.

SQL upit za stvaranje tablice izgleda ovako:

CREATE TABLE IF NOT EXISTS `users` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(40) NOT NULL,
`password` varchar(40) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Nakon što ste izvršili ovaj upit u alatu kao što je phpMyAdmin, ne zaboravite ručno dodati barem jednog korisnika pomoću INSERT naredbe kako biste mogli testirati funkcionalnost prijave.

Izrada HTML forme za prijavu

Sljedeći korak je stvaranje datoteke login.php. Ovo je sučelje s kojim će korisnik komunicirati. Forma mora koristiti POST metodu jer je ona sigurnija za slanje osjetljivih podataka poput lozinki u odnosu na GET metodu, gdje bi lozinka bila vidljiva u URL-u.

Evo osnovne strukture HTML forme:

<form action="" method="post"> <p>Korisničko ime: <input type="text" name="user"/></p> <p>Lozinka: <input type="password" name="pass"/></p> <p><input type="submit" name="submit" value="Prijava"/></p>
</form>

Obrada podataka i validacija

Kada korisnik klikne na gumb za prijavu, podaci se šalju skripti. Prvi zadatak PHP-a je provjeriti jesu li podaci poslani, ukloniti nepotrebne razmake pomoću funkcije trim() i osigurati da podaci zadovoljavaju minimalne kriterije sigurnosti. Za validaciju formata korisničkog imena i lozinke najbolje je koristiti regularne izraze (regex).

Preporučeni koraci za validaciju:

  • Provjera postoji li POST zahtjev.
  • Čišćenje unosa funkcijom trim().
  • Validacija dužine korisničkog imena (minimalno 5 znakova).
  • Validacija dužine lozinke (minimalno 8 znakova).
  • Spremanje grešaka u polje (array) kako bi korisniku mogli ispisati sve probleme odjednom.

Ovakav pristup omogućuje bolje korisničko iskustvo jer korisnik odmah zna što treba ispraviti, umjesto da dobiva jednu po jednu pogrešku.

Povezivanje s modelom podataka

U našem projektu koristimo ActiveRecord uzorak za rad s bazom podataka. Kako bismo provjerili postoji li korisnik s unesenim podacima, potrebno je definirati User klasu u našoj blog.php datoteci. Ovo nam omogućuje da umjesto pisanja kompleksnih SQL upita, jednostavno pozovemo metodu modela.

Kada je klasa definirana, provjera se svodi na jednostavan uvjet:

if(User::find_by_username_and_password($username, $password)) { echo "Prijava uspješna!";
} else { echo "Pogrešno korisničko ime ili lozinka.";
}

Zaključak i daljnji koraci

Implementacija login sustava temelj je sigurnosti vaše aplikacije. Kroz ovaj tutorijal naučili ste kako postaviti tablicu korisnika, kreirati formu, validirati podatke i povezati ih s modelom. Važno je napomenuti da je ovo tek početak. Sljedeći logični koraci u razvoju vašeg bloga uključuju rad sa sesijama ($_SESSION) kako bi se održala prijava korisnika kroz različite stranice, te stvaranje administracijskog sučelja koje je dostupno samo prijavljenim korisnicima.

Često postavljana pitanja (FAQ)

Zašto ne bih koristio GET metodu za prijavu?

GET metoda šalje podatke putem URL-a, što znači da bi lozinka bila vidljiva u povijesti preglednika i zapisnicima servera, što predstavlja ogroman sigurnosni rizik.

Što su to sesije u PHP-u?

Sesije su način pohranjivanja informacija o korisniku na serveru. One omogućuju aplikaciji da „zapamti“ tko je korisnik nakon što se uspješno prijavi, eliminirajući potrebu za ponovnim unosom podataka na svakoj stranici.

Je li ovaj sustav spreman za produkciju?

Ovaj vodič služi za učenje osnova. Za pravu web stranicu obavezno morate implementirati hashiranje lozinki (npr. password_verify), zaštitu od SQL injection napada i HTTPS protokol.

Odgovori

Vaša adresa e-pošte neće biti objavljena. Obavezna polja su označena sa * (obavezno)