Tanders Posted June 15, 2008 Report Posted June 15, 2008 Sveiki! Man tāds dīvains, varbut no skata stulbs jautājums - Vai mysql_num_rows() aizsargaa pilniiba no sql injekcijaam. Esmu ieveerojis, ka pret sql injekcijaam ir speciaali paredzeetas funkcijas ,piemeram, mysql_real_escape_string(), stripslashes() un vēl citas. Man ir login forma. Es speciali aizkomentēju visas pret sql injekcijām aizsargājošās funkcijas. Lūk daļa no koda. $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; $result=mysql_query($sql); $count=mysql_num_rows($result); if($count==1){ session_register("myusername"); session_register("mypassword"); header("location:login_success.php"); } else { echo "Wrong Username or Password"; } Mēģinu jebkuru sql injekciju ievadīt, kura ļautu ielogoties, bet izlec šis errors: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\host\DB\Login\checklogin.php on line 23 Es tā sapratu, ka errors izlec tādēļ, ka manis radītais querijs izvēlas vairākus rowus. Varbūt kāds var ieteikt kādu sql injekciju, kas apietu šo sistēmu? :D
andrisp Posted June 15, 2008 Report Posted June 15, 2008 Izlasi php.net manuaalii, ko dara mysql_num_rows. Un jaa - izmanto mysql_real_escape_string(). Un shaada kljuuda ir, ja kverijs ir nepareizs, nevis, ja tiek atgrieztas vairaakas rindas.
bubu Posted June 15, 2008 Report Posted June 15, 2008 mysql_num_rows fjai nav nekāda sakara ar sql injekcijām. mysql_query ir gan - tavā gadījumā tas ir atkarīgs no $tbl_name, $myusername un $mypassword mainīgo vērtībām (no kurienes tās dabūtas, kā apstrādātas, utt...) A par to kļūdu - raksti kodu šādi: $result=mysql_query($sql) or die(mysql_error()); tad arī redzēsi, kur ir kļūda.
Tanders Posted June 15, 2008 Author Report Posted June 15, 2008 Dīvaini, nepamanīju ka neesmu ielicis mysq_error pie kverija. Jā tagad redzu, ka kverijā kļūda. :)
Mr.Key Posted June 15, 2008 Report Posted June 15, 2008 (edited) SQL injekcija ir tad, kad tu izmanto nepārbaudītus un neapstrādātus parametrus SQL izteiksmes veidošanā. Piem.: "SELECT * FROM tabula WHERE group_id = '" . $_GET['group_id'] . "'"; piem, ja $group_id ir "1' AND '1' = '1" , tad ... Edited June 15, 2008 by Mr.Key
Grey_Wolf Posted June 16, 2008 Report Posted June 16, 2008 "SELECT * FROM tabula WHERE group_id = '" . $_GET['group_id'] . "'"; piem, ja $group_id ir "1' AND '1' = '1" , tad ... Nekas nenotiek ;) jo 1=1 ir true ;) a ja AND vieta ieliktu OR ;) tad gan tas WHERE vairs nestradaatu --> tb atgriestu visus ierakstus .... ---- Lai padotu citu ID mysql_real_escape_string() nepaliidzees ;)
Recommended Posts