Tanders Posted June 15, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
andrisp Posted June 15, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
bubu Posted June 15, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
Tanders Posted June 15, 2008 Author Report Share Posted June 15, 2008 Dīvaini, nepamanīju ka neesmu ielicis mysq_error pie kverija. Jā tagad redzu, ka kverijā kļūda. :) Link to comment Share on other sites More sharing options...
Mr.Key Posted June 15, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
Grey_Wolf Posted June 16, 2008 Report Share 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 ;) Link to comment Share on other sites More sharing options...
Mr.Key Posted June 16, 2008 Report Share Posted June 16, 2008 oops :) nu jā, pareizi, bija domāts OR. Link to comment Share on other sites More sharing options...
Recommended Posts