Kako napraviti logiranje na web stranici?
Kratki kurs => Kako napraviti logiranje na web stranici?
Prvi ozbiljni problem koji se javi kada se čovjek igra sa PHPom obično je logiranje i zaštita pojedinih dijelova stranice.
Tada bi prvo trebali pročitati nešto o sigurnosti PHP aplikacija, skontati logiku koji ćemo koristiti, zakrpiti sve moguće i nemoguće propuste (mi mislimo na sve mogućnosti, lošim momcima je dovoljna samo jedna).
U ovom kratkom kursu pokušaću da Vam približim jednu moju logiku koju sam nekada koristio pri zaštiti svojih stranica.
Ono što je potrebno za razumijevanje ovog kursa je osnovno znanje PHPa & MySQLa.
Podatke o korisnicima čuvaćemo u MySQL tabeli. Šifru nećemo spremati u orginalnom obliku nego kriptovanu.
Zašto? Zato jer onaj ko pregleda (vlasnik baze podataka, mysql servera, hacker…) sadržaj tabele u bazi podataka neće vidjeti šifre nego nešto tipa “$1$F3yJ96m5$.gA9aeoIAEj3M3blO77/p0″. Ovako osiguravamo da šifra nije nigdje zapisana (sem na žutom papiriću na korisničkom monitoru ) i time nije ni dostupna ljudima koji nemaju potrebe i prava da je znaju.
Šifru ćemo kriptovati funkcijom crypt();
Ova funkcija je one-way algoritam, znači da nema decrypt(), tj. ono što kriptujemo teoretski ne možemo vratiti u izvorni oblik.
Neko se može zapitati čemu to služi onda? Evo primjera gdje se to može iskoristiti:
Korisnik upiše svoj password kad se registruje, mi primimo taj password, kriptujemo ga i spremimo.
Korisnik dolazi, pokušava da se loguje, prihvatimo string koji je unio kao password, kriptujemo ga i onda taj hash poredimo sa onim kojeg imamo spremljen.
Ovako, opet napominjem, osiguravamo da se password ne nalazi na serveru!!!
MySQL tabela | |
Dosta, šuplje, da krenemo na posao ![]() Podaci o korisnicima, čuvaju se u tabeli koja se pravi slijedećim queryjem
|
FORMA ZA LOGIN | |
Dosta, šuplje, da krenemo na posao ![]() Korisnici se logiraju preko slijedeće forme:
Korisnik submituje ovu formu koja poziva stranicu user.php, u kojoj se vrši provjera unešenih podataka. |
Klasa i funkcije | ||||
Prije nego što objasnim kako se vrši provjera logiranja, da objasnimo klasu i funkcije koje će se koristi pri tome. U fajlu klase.php nalazi se klasa user, koja se sastoji od konstruktora klase (pri kreranju nove instance klase user funkcija user() se automatski pokreće i u ovom slučaju konektuje na MySQL server), te funkcija članica ove klase. Manual: Constructors are functions in a class that are automatically called when you create a new instance of a class with new. function user()
Slijedeća funkcija je Jedino što vrijedi spomenuti je linija u kojoj kriptujemo password. $CryptedPass = crypt($Pass);
Funkcija userlogin() obavlja glavni dio posla, i objasnićemo je liniju po liniju function userlogin($username,$Pass) { Funkcija kao argumente prima korisničko ime i password koji su upisani, te ih proslijeđuje u query, koji vraća podatke o korisniku sa datim imenom.(Napomena: validnost šifre ne provjeravamo u queryiju). $sql=“SELECT ID, CryptedPass AS crypty, ime, prezime FROM user WHERE username= ‘$username’ “; $r=mysql_query($sql) or die (mysql_error()); $a=mysql_fetch_array($r); Na početku postavljamo kontrolnu zastavicu koju ćemo poslati kao izlazni arument funkcije. Zastavicu $flag = 0; Ukoliko je query vratio jedan rezultat (ne bi trebalo više, ako kodom regulišemo da je username unique) upuštamo se u provjeru passworda. if (mysql_num_rows($r)==1) { Postavljamo novu varijablu $passw i setujemo njenu vrijednost na virjednost stringa koji smo pokupili iz baze za ovog korisnika (znam da pravim varijablu viška, al’ preglednije je). $passw=$a[‘crypty’]; Napomena: pri kriptovanju (u ovom if() statmentu) moramo koristiti uzorak jer bez njega ne bi dobili žljeni string čak i ako bi korisnik upisao ispravan password, jer crypt (“dino”); ne vrati uvijek isto, tek sa crypt(“dino”,”ovo#je#prije#kriptovano#”) dobijamo željeni string. if(crypt($Pass,$passw) == $passw) {
session_start(); $ip = getenv (“REMOTE_ADDR”);
$_SESSION[‘ses_info’] = array(“ip” => $ip,“ime” => $a[ime], “prezime” => $a[prezime], “ID” => $a[ID]); $flag = 1; } } return ($flag); } } ?> Listing fajla klase.php slijedi
|
||||
|
||||
|
Popularity: 100% [?]
Mozda bi bolje bilo da su se posjetiocima objasnile klase i funkcije pa se onda preslo na rad s ovakvom skriptom.
Ili eventualno da se ne koriste funkcije i klase..
No u svakom slucaju, bravo.
@xyz
pozdrav anonimnom posjetitelju,
hvala na komentaru. Drugi put rado sa imenom, nemate razloga za kriti se. Koristan savjet. Radi se o tome da je clanak napisan za naprednije korisnike, detaljnije o PHP-u moze se naci u PHP tecaju ovdje: http://www.bhwebmasters.net/?cat=36
no ni tu se nismo dotakli klasa. Mislim da cemo opcenito o klasama pisati uskoro. Preporucio bih tecaj objekt orinetiranog programiranja koji je jos samo u arhivi ovdje: http://www.most-art.de/ctutorial/oop/1100.php i uskoro cemo ga prebaciti na ovaj novi CMS.
pozdrav,
Zeljko Kvesic
@xyz
Ideja je bila da se pokaze logika autentifikacije korisnika, provjera i rad sa ‘zasticenim’ dijelom stranice.
Naravno sve se lijepo moglo pokazati i bez klasa, ali ovaj tutorijal i nije za pocetnike, niti za nekog ko bi uradio copy/paste.
Samo daje ideju, kod sam po sebi i nije iskoristiv.
Eh ovako, prije svega da pozdravim sve na portalu , ima korisnih stvari.. da ne duljim nego predjem na stvar, znam da komentaru nije mjesto ovdje ,al nemam vremena traziti odredjeno mjesto..
Ovako, poceo sam se bavit php programiranjem prije par dana, uz to pomalo i mysql ucim, nasao sam neku skriptu community portala pa na njoj vjezbam..zelio bi napravit da se na vrhu krecu porukice koje su korisnici upisali..
znaci napravio sam u .css tamo poziciju div-a i sve, i stavim u taj DIV oznaku marquee i stavim da mi cita iz baze podatke izmedju marqee oznaka , eh sad , prilikom upisivanja porukice , korisnici moraju upisat svoj nick i poruku, mene zanima jel moguce da automatski kako nadje koji je nick korisnika,jer samo logovani mogu postavit poruku,znaci, da samo upisu poruku ,a da se gore prikazuje i ta poruka kao i njihov username, ovako pisu u tuddja imena pa sam iskljucio opciju dok ne sredim..
pokusavo sam preko cookie,al ne ide.. kad se neko od korisnika izloguje onda samo poruka ostane,a cookie se brise .
et hvala i nadam se Vasoj pomoci