Artenis Posted August 4, 2008 Report Share Posted August 4, 2008 (edited) Ir iespējams, uzlikt mysql_real_escape_string visiem $_GET? Lai neķer lapa slimības no: ?id=' ?link=' Un nav katram jāraksta: mysql_real_escape_string($_GET['link']) Edited August 4, 2008 by Artenis Link to comment Share on other sites More sharing options...
v3rb0 Posted August 4, 2008 Report Share Posted August 4, 2008 kaut kur sākumā foreach($_GET as &$value) $value=mysql_real_escape_string($value); Link to comment Share on other sites More sharing options...
Artenis Posted August 4, 2008 Author Report Share Posted August 4, 2008 Paldies, darbojas. Tikai atkal nonāču pie problēmas, kas liecina par nepareizu manu darbību, šēit: $q_lapas_n_link = "SELECT * FROM $tb2 where id=".$_GET['link'].""; Tagad man jāprasa iespēja kā izbēgt no mysql_errora, ievadot adrešu joslā: ' vai " jo erroru met tā pat, kaut arī ir escape, protams loģiski kādēļ, bet tagad jādomā, kā no tā izbēģt! Kaut ja ievada, tad nekas nenotiek... tā kā draugiem.lv piemēram! php.lv/f/ forumam ar labs risinājums, tik tāds gluži neder! :) Link to comment Share on other sites More sharing options...
Artenis Posted August 4, 2008 Author Report Share Posted August 4, 2008 (edited) Labi, rinsinājumu radu. viss ok! :) if($_GET['link'] == '\"'){} Edited August 4, 2008 by Artenis Link to comment Share on other sites More sharing options...
andrisp Posted August 4, 2008 Report Share Posted August 4, 2008 Vajag pārbaudīt mainīgo. if (!empty($_GET['id']) && is_numeric($_GET['id'])) { $id = (int) $_GET['id']; $sql = ... } Link to comment Share on other sites More sharing options...
bubu Posted August 4, 2008 Report Share Posted August 4, 2008 Artenis: un ja es ievadīšu """ (trīs pēdiņas) ? Link to comment Share on other sites More sharing options...
andrisp Posted August 4, 2008 Report Share Posted August 4, 2008 Labi, rinsinājumu radu. viss ok! :) Un, ja es ievadīšu divas " ? Vai arī tekstu ? Vai arī jebko citu, kas nav vienkārši "? Link to comment Share on other sites More sharing options...
Artenis Posted August 4, 2008 Author Report Share Posted August 4, 2008 Nu nezinu, kā tur un kā, bet nu neņem man arī " un ' un lai ko un lai cik es tur rakstītu! Provēšu jūsu piemērus vēl. Link to comment Share on other sites More sharing options...
Mr.Key Posted August 4, 2008 Report Share Posted August 4, 2008 (edited) Ir iespējams, uzlikt mysql_real_escape_string visiem $_GET? Lai neķer lapa slimības no: ?id=' ?link=' Un nav katram jāraksta: mysql_real_escape_string($_GET['link']) Var, bet idejiski tas ir nepareizi! mysql_real_escape_string lieto priekš SQL izteiksmēm. Bieži iesācēji nesaprot, kā apstrādāt stringus, manuprāt, ļoti vienkārši - postētos datus SQL ieliek apmēram šādi: "INSERT .... ..... '" . mysql_real_escape_string($_GET['teksts']) . "' ... "; ja tas ir int datu tips, tad (int) $_GET['teksts'] - tur var būt viss kas, bet nekorektā gadījumā vienmēr būs 0, pat ja tāds mainīgais vispār nav definēts. un izvada šādi: <?= htmlspecialchars($teksts) ?> Un viss, nav ne sql injekcijs, ne html garbage - ja kāds vadīs iekšā htmlu, tad viņš tā arī izvadīsies ārā. Viss, ko lietotājs ievadīs, tā arī saglabāsies datubāzē. Un Tādas lietas kā strip_tags un strip_quotes ir paredzētas citiem mērķiem, tad, kad daži tegi ir atļauti, bet parasti tomēr izmanto [ un ] šim nolūkam. Starp citu, Zend frameworks to visu izdara automātiski, un ja izmanto MVC, tad arī var izveidot automātisku funkciju, kas pie saglabāšanas pāriet pāri un saglabā, bet tas jau ir mazliet advancētāk. Edited August 4, 2008 by Mr.Key Link to comment Share on other sites More sharing options...
Toms Posted August 4, 2008 Report Share Posted August 4, 2008 (edited) _makeSafe() paredzēta ievietošanai iekš DB, makeSafe paredzēta outputam. Man arī INT datu tips tiek laists cauri tāpat kā jebkurš teksts. Kāpēc ne? /** * @desc Escape variable * @param string $var * @param boolean[optional] $singlequotes Lai aizvāktu singlequotes konkrētajam mainīgajam. */ function _makeSafe($var, $singlequotes = true) { // Aizvāc automātiski saliktās slashes get_magic_quotes_gpc() ? $var = stripslashes($var) : null; // eskeipo return ($singlequotes ? "'".mysqli_real_escape_string($this->link,$var)."'" : mysqli_real_escape_string($this->link,$var)); } /* _makeSafe */ /**************************************************************************/ /** * @desc Nodrošina drošu outputu * @param string $var */ function makeSafe($var){ return htmlentities($var,ENT_QUOTES,'utf-8'); } /* makeSafe */ /**************************************************************************/ Edited August 4, 2008 by Toms Link to comment Share on other sites More sharing options...
Ghenis Posted August 4, 2008 Report Share Posted August 4, 2008 Parametrizētie vaicājumi Rullz ; Link to comment Share on other sites More sharing options...
bubu Posted August 4, 2008 Report Share Posted August 4, 2008 Man arī INT datu tips tiek laists cauri tāpat kā jebkurš teksts. Kāpēc ne? Tāpēc, ka int tipus SQL kverijā nav jāliek pēdiņās. Ja tev ir kverijs: SELECT * FROM tabule WHERE id = $id Tad $id izlaižot tikai cauri mysql_escape_string, piemēram, $_GET['id'], kurš satur vienu pēdiņu ", dabūsi kveriju: SELECT * FROM tabule WHERE id = \" Kas ir invalīds. Ja turpretī pieliksi priekšā (int), tad dabūsi ... WHERE id = 0, kas ir valīds. mysql_escape_string ir jāpielieto string datu tipiem, nevis visiem. Žēl, ka vairums php/mysql programmētāju nesaprot un neprot izmantot pareizus datu tipus. Derētu visiem pamācīties paskālu/javu/C# kādus gadus 2 pirms ķerties pie php. Cits variants, ja lieto mysqli interfeisu, ir lietot tos bind (vai kā tos tur sauca). Tad nekas nekad nebūs jāeskeipo. Link to comment Share on other sites More sharing options...
Toms Posted August 4, 2008 Report Share Posted August 4, 2008 Pareizi datu tipi tiek izmantoti. Un par invalīdu kveriju - nu un? Tiek atgriezts false un viss kārtībā. Vai ir kāds nopietns iemesls, lai skaitļus apstrādātu kā skaitļus? Link to comment Share on other sites More sharing options...
bubu Posted August 4, 2008 Report Share Posted August 4, 2008 Tāpēc, ka tas ir lieki - konvertēt INT'us uz stringiem, lai pielietotu mysql_escape_string, jo INT'iem tas nav nepieciešams. Lieka koda izpildīšana noteikti neko labu nerada. Vēl jo vairāk invalīdu kveriju sūtīšana - kam tas vispār ir vajadzīgs? Ļoti vienkārši var izmanto valīdus kverijus. Kamdēļ jārada slikts kods? Link to comment Share on other sites More sharing options...
Mr.Key Posted August 4, 2008 Report Share Posted August 4, 2008 Vai ir kāds nopietns iemesls, lai skaitļus apstrādātu kā skaitļus? Nopietnam iemeslam jābūt lai skaitļus neapstrādātu kā skaitļus ;) Link to comment Share on other sites More sharing options...
Recommended Posts