forSilence Posted January 5, 2011 Report Share Posted January 5, 2011 Tātad esu izveidojis pavisam vienkāršu php kodu, caur ko viņš nogādā datus datubāzē, tā kā esu iesācējs vēlētos paprasīt, lai jūs sniegtu padomus kā passargāt kodu no caurumiem, un kas man būtu jādara. Un vēlētos, lai jūs palabotu manu skriptu vai norādītu caurumus un kā viņu labot. Lūk ir kods: <?php include("../ftop.php"); if(isset($_SESSION['ieligojies'])) { if(isset($_GET['id'])) { $mans_id = quote_smart($_SESSION['mans_id']); $id = quote_smart($_GET['id']); $sql = mysql_query("SELECT * FROM members WHERE id = $mans_id"); $row = mysql_fetch_array($sql); $name = quote_smart($row['niks']); $sql1 = mysql_query("SELECT * FROM forum_incat WHERE id = $id ") or die("Kļuda: ".mysql_error()); $row1 = mysql_fetch_array($sql1); $id2 = quote_smart($row1['cat_id']); $fid = quote_smart($row1['id']); if(isset($_POST['title'])) { $title = quote_smart($_POST['title']); $apraksts = quote_smart($_POST['apraksts']); $raksts = quote_smart(nl2br(htmlspecialchars($_POST['raksts']))); if(!empty($_POST['title']) AND !empty($_POST['raksts'])){ mysql_query("UPDATE members SET posts = posts+1 WHERE id = $mans_id"); mysql_query("UPDATE forum_incat SET topick_count = topick_count+1 WHERE id = $id"); mysql_query("INSERT INTO forum_newtopick (forum_id,title,apraksts,raksts,user_id,user,last_activity,date) VALUES ($fid,$title,$apraksts,$raksts,$mans_id,$name,".time().",".time().") ") or die (mysql_error()); $id = mysql_query("SELECT * FROM forum_newtopick ORDER BY id DESC"); $id1 = mysql_fetch_array($id); mysql_query("INSERT INTO aktivitats (title,user,locid,date,links,place) VALUES ($title,$name,'".$id1['id']."',".time().", '/forums/showtopic/','newtopic') ") or die (mysql_error()); $sucess = "Raksts veiksmigi izveidots! <meta http-equiv='refresh' content='1;url=/forums/showtopic/".$id1['id']."' >"; ?> <?php }else{ $sucess = 'Virsraksta un raksta lauki nevar būt tukši!'; } } if(empty($row1['id'])) { $forua_id = "Nav sada foruma"; }else{ $forua_id = ''?><div id="category"> <div id="cat-title">Jauns raksts</div> <form name="forma" method="post"> <table border="0"> <tr><td><b>nosaukums</b></td> <td><input style="width:400px" type="text" name="title" /></td></tr> <tr><td><b>apraksts</b></td> <td><input style="width:500px" type="text" name="apraksts" /></td></tr> <tr><td><b>Saturs</b><br /> <script>edToolbar('postarea');</script> </td> <td><textarea id='postarea' name="raksts" rows="7" cols="50"></textarea></td></tr> <tr><td></td><td><input type="submit" value="Izveidot rakstu" /></td></tr> </table> </form> <?=$sucess?> </div><? ''; } } }else{ echo 'Ilogojies!'; } include("../fbot.php"); ?> Iepriekš paldies Quote Link to comment Share on other sites More sharing options...
Blitz Posted January 5, 2011 Report Share Posted January 5, 2011 kas ir f-ja quote_smart? (kodu studijā) Quote Link to comment Share on other sites More sharing options...
forSilence Posted January 5, 2011 Author Report Share Posted January 5, 2011 function quote_smart($value) { if (get_magic_quotes_gpc()) { $value = stripslashes($value); } $value = "'" . mysql_real_escape_string($value) . "'"; return $value; } Quote Link to comment Share on other sites More sharing options...
briedis Posted January 5, 2011 Report Share Posted January 5, 2011 $value = "'" . mysql_real_escape_string($value) . "'"; Šis neliekas pareizi, ka automātiski tiek pievienotas pēdiņas. Manuprāt, to labāk darīt kad liek kvērijā, nevis funkcijā. $query = "SELECT * FROM table WHERE a = '" . quote_smart($a) . "'"; Otrkārt, vajadzētu arī kodā likt normālas atkāpes un atsevišķās vietās tukšas rindiņas, lai kods ir pārskatāmās. Savādāk ir viena liela putra. Quote Link to comment Share on other sites More sharing options...
forSilence Posted January 5, 2011 Author Report Share Posted January 5, 2011 (edited) $value = "'" . mysql_real_escape_string($value) . "'"; Šis neliekas pareizi, ka automātiski tiek pievienotas pēdiņas. Manuprāt, to labāk darīt kad liek kvērijā, nevis funkcijā. $query = "SELECT * FROM table WHERE a = '" . quote_smart($a) . "'"; Otrkārt, vajadzētu arī kodā likt normālas atkāpes un atsevišķās vietās tukšas rindiņas, lai kods ir pārskatāmās. Savādāk ir viena liela putra. Paldies par ieteikumu, man iepriekš bija pašam iktas pēdiņas, bet tad es papētīju dažus skriptus un liku kopā ar quote_smart. Esu redzēji ka pēdiņas liek šādās vietās $query = "SELECT `a`, `b` FROM `table` WHERE `a` = '" . quote_smart($a) . "'"; Tas kaut ko maina? Edited January 5, 2011 by forSilence Quote Link to comment Share on other sites More sharing options...
briedis Posted January 5, 2011 Report Share Posted January 5, 2011 Tas maina, ja tabulas nosaukums ir "nestandarta". Savādāk, nav atšķirības. Quote Link to comment Share on other sites More sharing options...
forSilence Posted January 5, 2011 Author Report Share Posted January 5, 2011 Sk.. Vēlējos paprasīt, kā var ievietot datus datubāzē nepārlādējot lapu. Zinu ka to var panākt ar js piem Query notiek kaut kāda <div id="kkas"></div> "klucī". Vēlētos dabūt gatavu skriptu, jo neribu sākt mācīties vairākas valodas uz reiz. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted January 5, 2011 Report Share Posted January 5, 2011 AJAX. ^^ http://net.tutsplus.com/articles/news/how-to-make-ajax-requests-with-raw-javascript/ . P.S. Bet to var darīt ar, teiksim, jQuery palīdzību. Tev, kā iesācējam, būs vieglāk! =) Quote Link to comment Share on other sites More sharing options...
Vecteevs Posted January 5, 2011 Report Share Posted January 5, 2011 no manas puses arī viens jautājums.. To quote_smart var arī nelikt? Quote Link to comment Share on other sites More sharing options...
Blitz Posted January 6, 2011 Report Share Posted January 6, 2011 (edited) nu es istieku tikai ar mysql_real_escape_string lai izsargatos no sql injekcijam. Edited January 6, 2011 by Blitz Quote Link to comment Share on other sites More sharing options...
daGrevis Posted January 6, 2011 Report Share Posted January 6, 2011 (edited) Ja magic_quotes_gpc ir ieslēgts, tad viņs automātiksi visam $_REQUEST[] (t.b., $_POST[] + $_GET[]) uztaisīs stripSlashes(). Es labāk to darītu manuāli. Izslēgt vari to šādi... if( get_magic_quotes_runtime() ) { set_magic_quotes_runtime( false ); } Ja ir izslēgts, tad ir jāliek! Savādāk, ja stringā, kurš tiks sūtīts uz datubāzi kā pieprasījums būs '\', bet tas nebūs escape'ots - '\\', tad var sanākt nelabi... =) P.S. Nemāku ar Linux uzrakstīt '\'. Meklēju Google pēc atslēgas vārdiem 'backslash'. =D=D Edited January 6, 2011 by daGrevis Quote Link to comment Share on other sites More sharing options...
indoom Posted January 6, 2011 Report Share Posted January 6, 2011 (edited) funkcijā var piemest klāt, lai uz php5.3 nesākas brīnumi. if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) Kā drošības caurumu var uzskatīt "or die (mysql_error());" Nevienam citam tavus mysql_errorus nevajag redzēt. Kā arī vispār liekas dumji likt lapās pie kļūdām die(); Un vēl - meta tagiem jābūt <head> daļā. P.S. daGrevis, slashus jau noņem quote_smart funkcija ar if (get_magic_quotes_gpc()) { $value = stripslashes($value); } Edited January 6, 2011 by indoom Quote Link to comment Share on other sites More sharing options...
daGrevis Posted January 6, 2011 Report Share Posted January 6, 2011 Indoom, izlaboju. =) Quote Link to comment Share on other sites More sharing options...
krikulis Posted January 6, 2011 Report Share Posted January 6, 2011 Ja magic_quotes_gpc ir ieslēgts, tad viņs automātiksi visam $_REQUEST[] (t.b., $_POST[] + $_GET[]) uztaisīs stripSlashes(). Es labāk to darītu manuāli. Izslēgt vari to šādi... if( get_magic_quotes_runtime() ) { set_magic_quotes_runtime( false ); } magic_quotes_gpc nevar izslēgt caur php, as jamās tiek izmantotas pirms scripta par inputa $_{GET,POST,COOKIES,REQUEST} eskeipošanu atbild tieši jamās izslēdzam php.ini (x)or .htacess visu ar magic_quotes_* saistīto herņu. autoram: raujam podā mysql_* paplašinājumus un izmantojam http://www.php.net/PDO ar parametrizētiem kvērījiemm!! Quote Link to comment Share on other sites More sharing options...
daGrevis Posted January 6, 2011 Report Share Posted January 6, 2011 magic_quotes_gpc nevar izslēgt caur php, as jamās tiek izmantotas pirms scripta par inputa $_{GET,POST,COOKIES,REQUEST} eskeipošanu atbild tieši jamās izslēdzam php.ini (x)or .htacess visu ar magic_quotes_* saistīto herņu. autoram: raujam podā mysql_* paplašinājumus un izmantojam http://www.php.net/PDO ar parametrizētiem kvērījiemm!! Pārlasi manuāli un atslābinies ar Savu PDO. http://lv.php.net/manual/en/function.get-magic-quotes-runtime.php Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.