
Prije nego što započnete s izradom administratorskog dijela PHP bloga, potrebno je dobro razumjeti kako funkcionira sustav prijave. Bez adekvatnog mehanizma autentifikacije svaka osoba koja posjeti vašu stranicu mogla bi dodavati, mijenjati ili brisati sadržaj, što bi dovelo do gubitka integriteta i povjerenja korisnika. Ovaj članak objašnjava najčešće načine prijave, ključne sigurnosne mjere i tipičan tijek provjere podataka koji ćemo primijeniti u sljedećim tutorialima.
Najčešći načini autentifikacije u web aplikacijama
U modernom internetskom okruženju postoji više metoda za provjeru identiteta korisnika. Najstandardniji oblik je unos korisničkog imena i lozinke, poput onog na popularnim platformama (npr. Facebook). U takvom sustavu lozinka se ne pohranjuje u otvorenom obliku, već se pretvara u kriptirani oblik – najčešće hash‑iranje uz dodatak soli – kako bi se spriječilo da netko iz baze podataka pročita originalnu vrijednost.
Druga metoda podrazumijeva privremene lozinke koje sustav generira po zahtjevu i šalje korisniku putem e‑maila ili SMS‑a. Ovaj pristup se često koristi u slučajevima kada korisnik zaboravi lozinku ili za jednokratnu provjeru identiteta. Postoje i naprednije tehnologije poput pametnih kartica ili tokena koji, nakon inicijalne autentifikacije, generiraju jedinstvenu šifru za svaku sesiju.
Još jedna, sve popularnija, opcija je dvofaktorska autentifikacija (2FA). Uz standardni unos lozinke korisnik dodatno mora potvrditi identitet putem mobilne aplikacije, SMS‑a ili hardverskog tokena. Iako je ova metoda izvan okvira osnovnog tutorijala, vrijedno je napomenuti da značajno podiže razinu sigurnosti.
Osnovne sigurnosne mjere pri izradi login sustava
Prilikom dizajniranja obrasca za prijavu, prvi korak je sanitizacija svih podataka koji dolaze s klijentske strane. Bez provjere i filtriranja, napadač može iskoristiti SQL injection ranjivost unosom zlonamjernih znakova (npr. \”‘ OR 1=1 –\”). Da bi se izbjegla takva situacija, prije slanja upita prema bazi podataka potrebno je:
- ukloniti nepotrebne razmake i kontrolne znakove;
- koristiti pripremljene izjave (prepared statements) ili ORM‑ove koji automatski escapiraju vrijednosti;
- provjeriti da li unos zadovoljava očekivani format (npr. dopuštena duljina, dozvoljeni znakovi).
Još jedan čest problem je neograničen broj pokušaja prijave. Ako napadač ima popis korisničkih imena, može automatizirano probati različite lozinke sve dok ne otkrije ispravnu. Zato se preporučuje implementirati mehanizam blokade računa nakon tri neuspješna pokušaja, uz obavijest korisniku putem e‑maila ili SMS‑a. Ovakav pristup je sličan blokadi PIN‑koda na bankovnim ili SIM karticama.
Tipičan tijek provjere podataka prilikom login‑a
U nastavku je prikazan korak po korak proces koji ćemo primijeniti u našem PHP projektu:
- Korisnik popuni obrazac i pošalje
usernameipassword. - U PHP skripti podijelimo primljene vrijednosti u zasebne varijable.
- Uklonimo eventualne razmake na početku i na kraju te provjerimo minimalnu duljinu i format (npr. lozinka mora sadržavati najmanje jedno veliko slovo, jedno malo slovo i broj, te biti duga najmanje 10 znakova).
- Izvedemo dodatnu provjeru na nedozvoljene znakove (npr.
';--ili<). - Ako bilo koja od provjera ne uspije, zaustavimo proces i vratimo poruku o grešci.
- U slučaju da su podaci valjani, lozinku hashiramo koristeći algoritam poput
password_hash()sBCRYPTopcijom. - Kroz pripremljeni upit provjerimo postoji li korisnik čiji je pohranjeni hash jednak hashiranoj verziji unesene lozinke.
- Ako upit vrati jedan rezultat, autentifikacija je uspješna – započinjemo sesiju (ili postavljamo cookie) i preusmjeravamo korisnika na administracijsko sučelje.
- U suprotnom, povećavamo brojač neuspješnih pokušaja i, po potrebi, aktiviramo blokadu računa.
Implementacija sesija i trajnost prijave
Da bi korisnik ostao prijavljen i tijekom navigacije po stranicama, potrebno je kreirati session ili postaviti cookie. Sesija je pohranjen na serveru i identificira se jedinstvenim ID‑om koji se šalje pregledniku. Nakon uspješne provjere lozinke, u PHP‑u pozovemo session_start(), pohranimo ID korisnika u $_SESSION['user_id'] i na svakoj zaštićenoj stranici provjeravamo postojanje tog podatka. Ako sesija ne postoji, preusmjeravamo korisnika natrag na login stranicu.
Ukoliko želite da se korisnik automatski prijavi i nakon zatvaranja preglednika, možete kreirati trajni cookie koji sadrži token. Taj token se pohranjuje i u bazu podataka, a prilikom svakog posjeta provjerava se njegova valjanost. Bitno je token šifrirati i postaviti odgovarajući HttpOnly i Secure flag kako bi se spriječile XSS i man‑in‑the‑middle napade.
Zaključak
U ovom članku detaljno smo razložili različite metode prijave, ključne sigurnosne prakse i konkretan tijek provjere podataka koji će biti temelj našeg PHP bloga. Razumijevanje ovih principa omogućuje vam da u sljedećim tutorijalima izgradite pouzdan i zaštićen sustav autentifikacije. Preporučujemo da odmah pokušate implementirati opisani tok, testirate ga na lokalnom poslužitelju i, ukoliko zapnete, vratite se na ovaj vodič kako biste usp