ugrás a tartalomhoz

SQL injection vedelem

Anonymous · 2006. Okt. 20. (P), 07.39
Hello
Van egy regisztraciora szolgalo urlapom, amelyen letezik egy csomo input field.

A fontosabb input fieldek a kovetkezok : username, e-mail, password

Ezeket a kovetkezo keppen visszem be adatbazisba :
  1. <?php  
  2. $querydb = "INSERT INTO fj_users (id,username,email,password) VALUES (0, '".$username."', '".$email."', '".$password."');  
  3. mysql_query($querydbor die(mysql_error());  
  4. ?>  
Jobb lenne mysql_real_escape_string-et hasznali az adatok bevitelenel ?
Tudna valaki mutatni egy rovid peldat. Es nezegettem a http://www.php.net/manual/en/function.mysql-real-escape-string.php lapot de csak SELECT-re adnak peldat.

Nagyon halas lennek va valaki szakitana ram par percet.

Koszonom !
 
1

ugyan úgy

Szekeres Gergő · 2006. Okt. 20. (P), 09.00
  1. $querydb = sprintf("INSERT INTO fj_users  
  2.                     (username,email,password)  
  3.                     VALUES ('%d''%d''%d')",  
  4.                     mysql_real_escape_string($_POST['username'],  
  5.                     mysql_real_escape_string($_POST['email'],  
  6.                     mysql_real_escape_string($_POST['pass']);  
  7.                   
1, auto_inc mezőknek nem kell tartalmat adni
2, insertnél ugyan úgy működik mindnen, mint selectnél...
3, "élesbe" ne irasd ki a mysql_error()-t
3, jobb lenne írni erre egy saját függvényt, ami kiszedi a nem megfelelő karaktereket, és egyben escapeel is.
2

először is...

TeeCee · 2006. Okt. 20. (P), 09.02
... a $username az ugye nem register_globals=on-nal kapott változó?

Amúgy meg a SELECT miben különbözik az INSERT-től?
  1. <?php  
  2. $username = mysql_real_escape_string( $_POST['username'] );  
  3. $password = mysql_real_escape_string( $_POST['password'] );  
  4. $email = mysql_real_escape_string( $_POST['email'] );  
  5.   
  6. $querydb = "INSERT INTO fj_users (id,username,email,password) VALUES (0, '".$username."', '".$email."', '".$password."');  
  7. mysql_query($querydbor die(mysql_error());  
  8. ?>  
Ha még szebben akarod megoldani, akkor:
  1. <?php  
  2. function getInput( $inputName ) {  
  3.   return mysql_real_escape_string( $_POST['username'] );  
  4. }  
  5. $username = getInput( 'username'] );  
  6. $password = getInput( 'password'] );  
  7. $email = getInput( 'email'] );  
  8.   
  9. $querydb = "INSERT INTO fj_users (id,username,email,password) VALUES (0, '".$username."', '".$email."', '".$password."');  
  10. mysql_query($querydbor die(mysql_error());  
  11. ?>  
Remélem, tudtam segíteni...

(Csak nekem tűnik úgy, hogy nem színezi rendesen a PHP-s kódot? rosszul írtam bele valamit?)
3

hiányzik egy idézőjel

Anonymous · 2006. Okt. 20. (P), 10.06
a $password után még hozzáfűzöl egy aposztrófot és egy zárójelet a $querydb változóhoz, de nem zárod le a sztringet az idézőjellel:
  1. <?php  
  2. $querydb="... (".$password."');  
  3. ?>  
gex
4

A sietség átka

TeeCee · 2006. Okt. 20. (P), 11.18
Köszi gex!
Siet az ember, aztán meg mutatja a hibáskódot és nem érti, hogy mi a baja ;-)
Ráadásul az értékadások után is elrontotam a cut'n'paste-t, bennmaradt egy "]", de az eredeti kérdezőtől bemásolt kód is eleve syntax hibás volt...
  1. <?php  
  2. function getInput( $inputName ) {  
  3.   return mysql_real_escape_string( $_POST['username'] );  
  4. }  
  5. $username = getInput( 'username' );  
  6. $password = getInput( 'password' );  
  7. $email = getInput( 'email' );  
  8.   
  9. $querydb = "INSERT INTO fj_users (id,username,email,password) VALUES (0, '".$username."', '".$email."', '".$password."')";  
  10. mysql_query($querydbor die(mysql_error());  
  11. ?>