radim na sajtu na kome cu imati registraciju korisnika. Interesuje me sta vi predlazete kao resenje, cookie, session, https ili nesto jos
Registracija korisnika
Zaključano
Zakačeno
Brkas pojmove. Sa strane php-a treba ti ili cookies ili session (preporucljivo je session), a da li ces koristiti http ili https je stvar toga kakav server imas (da li onaj sa sertifikatom tj. ssl i zelis da ti se kriptuju podaci od korisnika do tvog servera ili bez enkripcije...
Ako nemas server koji je sa ssl-om, ne znam kako ces ga upotrebiti kad nista ne slusa na portu 443 (valjda taj bese)...
Ako nemas server koji je sa ssl-om, ne znam kako ces ga upotrebiti kad nista ne slusa na portu 443 (valjda taj bese)...
Potpis
Kad sve ostalo zakaže, pročitaj uputstvo...
web server je sa sertifikatom, dakle https. Pitanje je samo sta je prakticnije (za sta treba manje vremena) za implementaciju.
izmenjeno 2 puta, poslednji put zrnoo 03.03.2007. u 20:16
Izmene poruke
- zrnoo03.03.2007. u 20:16zapis iz teksta poruke
- zrnoo03.03.2007. u 20:15zapis iz teksta poruke
evo ti jednog malog primera (dela) koda sa - session, (znaci ne cookies)...ovo ti je iz glave - pa malo proveri skriptu tj njen deo !
Prvo provera
ispis i prolaz dalje
pozz
Prvo provera
Code:
session_start();
if (isset($HTTP_POST_VARS['korisnik']) && isset($HTTP_POST_VARS['lozinka']))
{
// Ukoliko korisnik zeli da se uloguje
$korisnik = $HTTP_POST_VARS['korisnik'];
$lozinka = $HTTP_POST_VARS['lozinka'];
mysql_select_db($database, $con);
$query = "select * from korisnici where user='$korisnik' and pass='$lozinka'";
$result = mysql_query($query, $con);
if (mysql_num_rows($result) >0 )
{
// ukoliko u bazi postoji registrovan korisnik
$HTTP_SESSION_VARS['valid_user'] = $korisnik;
}
}
session_start();
if (isset($HTTP_POST_VARS['korisnik']) && isset($HTTP_POST_VARS['lozinka']))
{
// Ukoliko korisnik zeli da se uloguje
$korisnik = $HTTP_POST_VARS['korisnik'];
$lozinka = $HTTP_POST_VARS['lozinka'];
mysql_select_db($database, $con);
$query = "select * from korisnici where user='$korisnik' and pass='$lozinka'";
$result = mysql_query($query, $con);
if (mysql_num_rows($result) >0 )
{
// ukoliko u bazi postoji registrovan korisnik
$HTTP_SESSION_VARS['valid_user'] = $korisnik;
}
}
ispis i prolaz dalje
Code:
if (isset($HTTP_SESSION_VARS['valid_user']))
{
echo 'Ulogovani ste kao:<strong> '.$HTTP_SESSION_VARS['valid_user'].' </strong><br />;
echo '<a href="members.php">Ulaz samo za clanove</a><br />';
}
else
{
if (isset($korisnik))
{
// Ukoliko ima problem sa logovanjem
echo 'Korisnik i Lozinka se nepoklapaju.<br />Pokušajte ponovo.<br /><br />';
}
if (isset($HTTP_SESSION_VARS['valid_user']))
{
echo 'Ulogovani ste kao:<strong> '.$HTTP_SESSION_VARS['valid_user'].' </strong><br />;
echo '<a href="members.php">Ulaz samo za clanove</a><br />';
}
else
{
if (isset($korisnik))
{
// Ukoliko ima problem sa logovanjem
echo 'Korisnik i Lozinka se nepoklapaju.<br />Pokušajte ponovo.<br /><br />';
}
pozz
Primer iz glave je los. Zasto? Prvo, selektuje sve iz tabele (sta ako tabela ima puno polja, sto usporavati bazu, kad ti treba samo jedan podatak?), a drugo ostavlja mogucost sql injectiona kod lozinke. Necu to objasnjavati, ali bih ja sql upit napravio ovako:
A onda proveravao da li je pass iz baze jednak sa pass-om iz post polja.
A sa strane http-a i https-a je isto sto se tice implementacije ako isti server radi i na portu za http i za https - podrska za php je u oba slucaja identicna, kriptuje se veza izmedju klijenta i servera, ne servera i php-a. Korisnik ce biti obavesten o sertifikatu ako je https a nece ako je http.
Code:
select pass from korisnici where user='$korisnik'
select pass from korisnici where user='$korisnik'
A onda proveravao da li je pass iz baze jednak sa pass-om iz post polja.
A sa strane http-a i https-a je isto sto se tice implementacije ako isti server radi i na portu za http i za https - podrska za php je u oba slucaja identicna, kriptuje se veza izmedju klijenta i servera, ne servera i php-a. Korisnik ce biti obavesten o sertifikatu ako je https a nece ako je http.
Potpis
Kad sve ostalo zakaže, pročitaj uputstvo...
dobro, sa jedne strane se i slazem ali sa druge ne...ako neplanira da ima neki ogroman broj korisnika (do par hiljada ce raditi maltene istom brznom), ovako mu je lakse ako zeli da kasnije ispisuje i ostale podatke o datom korisniku, nego da pravi novi upit.... al' dobro...to je njegov izbor!! :))
and then was i light! :)
and then was i light! :)
Hvala
Citat:
Jbyn4e: a drugo ostavlja mogucost sql injectiona kod lozinke. Necu to objasnjavati, ali bih ja sql upit napravio ovako:
Code:
select pass from korisnici where user='$korisnik'
select pass from korisnici where user='$korisnik'
Kako si ti zakljucio da njegov SQL ostavlja mogucnost za SQL injection a tvoj je navodno siguran ?
A da Najvise mi se svidja ono ostavlja mogucnost SQL injection kod lozinke :) A sta je sa username ???
Prvo ako je http://au3.php.net/magic_quotes On onda je gotovo nemoguce izvristi SQL injection na njegovom SQL-u
Ako je magic_quotes Off (redak slucaj)
PHP 3.x.x By default Off
Od PHP 4.x.x + By default ON
Onda je moguce izmenuti i TVOJ i NJEGOV SQL samo nigde nije moguce videti rezultat ali je uvek se mozes ulogovati.
Poz
sale
Potpis
Sto mozes danas ne ostavljaj za sutra!
Sale, gde sam ja rekao da je moj siguran kod? Naravno da to ostavlja i dalje mogucnost sql injection-a, ali manje nego na prvi nacin. Ja bih naravno prvo uradio jedan addslashes i ereg_replace (ako je potrebno, gledano sa strane magic_quotes koje si napisao), ali to nije bila tema. Drugo, namerno sam napisao da to necu objasnjavati bas zbog mogucnosti sql injectiona jer onda moram i da pisem kako se zastititi od istog, a nemam vremena za to...
Sve u svemu, polako, naucice!
Sve u svemu, polako, naucice!
Potpis
Kad sve ostalo zakaže, pročitaj uputstvo...