ugrás a tartalomhoz

Bejelentkező script hiba???

Kalas · 2010. Május. 7. (P), 09.02
Kérlek segítsetek, a kódom így néz ki:
  1. <?php  
  2.   
  3. $username = $_POST[username] ;  
  4. $password = $_POST[password] ;  
  5.   
  6. $kapcsolat = mysql_connect ('127.0.0.1''animefanblog''naruto');  
  7. mysql_select_db ('animefanblog');  
  8.   
  9. $parancs = "SELECT * FROM videosmart WHERE username = '$username'";  
  10. $valasz = mysql_query($parancs);  
  11. $sor = mysql_fetch_array($valasz);  
  12.   
  13. if ($password == $sor[password])  
  14.     {  
  15.         print "Sikeres bejelentkezés";  
  16.     }  
  17. else   
  18.     {  
  19.         print "Sikertelen bejelentkezés";  
  20.     }  
  21. mysql_close($kapcsolat);  
  22. ?>  
ezzel mi a baj?? mikor belépek a jó felhasználónév jelszóval akkor aztírja ki, hogy sikertelen bejelentkezés:S segítsetek!
 
1

Itt lehet tesztelni

Kalas · 2010. Május. 7. (P), 09.03
Teszt itt van animefanblog.atw.hu, felvan töltve rá.
2

Az adatbázisból a felhasználó

csaba86 · 2010. Május. 7. (P), 09.41
Az adatbázisból a felhasználó nevét kéred le, de te meg a jelszót ellenőrzöd. Kérdezd le mind a kettőt és ellenőrizd is őket és használj valami ellenőrzést mert könnyen fellehet törni az oldalad ha ezt így fogod használni.
3

A "select *" szerintem

deejayy · 2010. Május. 7. (P), 10.24
A "select *" szerintem mindent lehoz, de lehet elnézem.

A megoldáshoz irasd ki a képernyőre a változók értékeit. Ha a $sor['password'] üres, akkor már tudod, hogy az adatlekérésnél van a hiba. Ha így van, akkor mysqladmin-ból add ki a parancsot és nézd meg mit ad vissza.

Egyébként nekem azt írja, hogy "Sikeres bejelentkezés" :) Bármire :)
5

Hoppá, igazad van, lehoz

csaba86 · 2010. Május. 7. (P), 12.17
Hoppá, igazad van, lehoz mindent.
4

SQL Injection

Poetro · 2010. Május. 7. (P), 10.51
És jó lenne escapelni is az SQL-nek átadott adatokat, ugyanis jelen formában ha azt adom meg felhasználónévnek, hogy akarmi' OR 1 akkor be fog léptetni :). Egy ugye abból adódik, hogy a lekérdezés ekkor a következő lesz:
  1. SELECT * FROM videosmart WHERE username = 'akarmi' OR 1  
Én kb. így csinálnám:
  1. <?php  
  2. $kapcsolat = mysql_connect ('127.0.0.1''...''...');  
  3. mysql_select_db ('animefanblog');  
  4.   
  5. if (!emptyempty($_POST['username']) && !emptyempty($_POST['password'])) {  
  6.   $username = $_POST['username'];  
  7.   $password = $_POST['password'];  
  8.      
  9.   $parancs = sprintf("SELECT * FROM videosmart WHERE username = '%s' AND password = '%s'",  
  10.     mysql_real_escape_string($username), mysql_real_escape_string($password));  
  11.   $valasz = mysql_query($parancs);  
  12.     
  13.   if ($sor = mysql_fetch_assoc($valasz)) {  
  14.     print "Sikeres bejelentkezés";  
  15.   }  
  16.   else {  
  17.     print "Sikertelen bejelentkezés";  
  18.   }  
  19. }  
  20.   
  21. mysql_close($kapcsolat);  
  22. ?>  
Jah, és legközelebb nem add meg az adatbázisod felhasználó nevét, és jelszavát, mivel "senki" se kíváncsi rá ;).
7

jelen formában ha azt adom

kuka · 2010. Május. 7. (P), 16.17
jelen formában ha azt adom meg felhasználónévnek, hogy akarmi' OR 1 akkor be fog léptetni :)

Be fog lépni, ha az űrlapba beírt jelszó egyezik a MySQL természetes adatsorrendjében elsőnek szerepelő felhasználó jelszavával. Ez szerintem nem sokat segít egy támadónak.

De egy biztos: mielőbbi javítás szükséges.
8

Tapasztalatom szerint

solkprog · 2010. Május. 7. (P), 16.26
Tapasztalatom szerint az első rekord az "users"-táblában az esetek 90%-ban az (egyik) admin-é...
Másfelől:
  1. admin' --   
így meg tuti az admin felhasználóhoz lép be (nyilván ha admin-nak hívják)
10

Igen. Amennyiben a támadó

kuka · 2010. Május. 7. (P), 17.26
Igen. Amennyiben a támadó tudja az illető admin jelszavát. Amiért az adatbázis lekérdezés sérülékeny, azért a jelszó összehasonlítást a PHP script még elvégzi.

A súlyos biztonsági hiba az volna, ha a jelszó összehasonlítást nem a PHP végezné, hanem ugyanaz a sérülékeny SQL.
12

elnéztem

solkprog · 2010. Május. 7. (P), 19.53
én erre gondoltam:
  1. $parancs = "SELECT * FROM videosmart WHERE username = '$username' AND pass='$pass'";  
Sorry elnéztem. (pontosabban Poetro javított kódjára néztem csak rá)

Kalas: Poetro kódjával mi a bajod?
13

Átfogalmazom

Poetro · 2010. Május. 7. (P), 20.13
Akkor elegendő, ha valakinek eltalálod a jelszavát, és akkor be tudsz lépni valaki nevében.
Ekkor ugye: ' OR password='1234
De itt most nem is ez a lényeg, hanem hogy lyukak vannak, amiket mindenképpen foltozni kell.
6

a picsaxDD

Kalas · 2010. Május. 7. (P), 13.48
Ja, bocsi:DDDD istenem mekkora barom vagyokXD
ez már fáj
9

Nekünk meg a stílusod. Ez itt

deejayy · 2010. Május. 7. (P), 16.27
Nekünk meg a stílusod. Ez itt egy szakmai fórum, kérlek ne úgy kezeld, mintha MSN-en beszélnél a haveroddal.

Többiek nevében is köszönöm.
11

Konkrét kód

Kalas · 2010. Május. 7. (P), 19.24
Akkor valaki írja le legyetek szívesek a konkrét kódot amit be kell illesztenem az oldalamra.
Köszönöm szíves kedvességeteket.

Így jó lesz?