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 :

<?php
$querydb = "INSERT INTO fj_users (id,username,email,password) VALUES (0, '".$username."', '".$email."', '".$password."');
mysql_query($querydb) or die(mysql_error());
?>
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


$querydb = sprintf("INSERT INTO fj_users
                    (username,email,password)
                    VALUES ('%d', '%d', '%d')",
                    mysql_real_escape_string($_POST['username'],
                    mysql_real_escape_string($_POST['email'],
                    mysql_real_escape_string($_POST['pass']);
                
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?

<?php
$username = mysql_real_escape_string( $_POST['username'] );
$password = mysql_real_escape_string( $_POST['password'] );
$email = mysql_real_escape_string( $_POST['email'] );

$querydb = "INSERT INTO fj_users (id,username,email,password) VALUES (0, '".$username."', '".$email."', '".$password."');
mysql_query($querydb) or die(mysql_error());
?>
Ha még szebben akarod megoldani, akkor:

<?php
function getInput( $inputName ) {
  return mysql_real_escape_string( $_POST['username'] );
}
$username = getInput( 'username'] );
$password = getInput( 'password'] );
$email = getInput( 'email'] );

$querydb = "INSERT INTO fj_users (id,username,email,password) VALUES (0, '".$username."', '".$email."', '".$password."');
mysql_query($querydb) or die(mysql_error());
?>
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:

<?php
$querydb="... (".$password."');
?>
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...

<?php
function getInput( $inputName ) {
  return mysql_real_escape_string( $_POST['username'] );
}
$username = getInput( 'username' );
$password = getInput( 'password' );
$email = getInput( 'email' );

$querydb = "INSERT INTO fj_users (id,username,email,password) VALUES (0, '".$username."', '".$email."', '".$password."')";
mysql_query($querydb) or die(mysql_error());
?>