wollis Posted December 19, 2009 Report Share Posted December 19, 2009 Man ir neliela problēma. Google webmaster tools piedāvā iespēju apskatīt lapu kāda tā izskatās no bota skata. Izmatojot iespēju secināju, ka bots neredz tekstu kas tiek izvilkts no db ņemot vērā GET. Varbūt kādam ir risinājums? Quote Link to comment Share on other sites More sharing options...
briedis Posted December 19, 2009 Report Share Posted December 19, 2009 Pag, paņemšu kristāla bumbu, paskatīšos kāds tev tur ir kods, kas ņem no db un attēlo ņemot vērā GET :) Quote Link to comment Share on other sites More sharing options...
wollis Posted December 19, 2009 Author Report Share Posted December 19, 2009 (edited) Lūk tava burvju lampa! $get = secure($_GET['ident']); $lang_id = $_SESSION['lang_id']; $info=mysql_query("SELECT * FROM content WHERE lang_id = '$lang_id' AND ident = '$get'"); $inf=mysql_fetch_array($info); echo ' <table cellpadding="0" cellspacing="0" width="680"> <tr> <td width="680" height="10" valign="top"></td> </tr> <tr> <td width="680" height="20" class="content_title" valign="top">'.$inf['title'].'</td> </tr> <tr> <td width="680" height="4" valign="top"></td> </tr> <tr> <td width="680" class="content_text" valign="top">'.$inf['text'].'</td> </tr> <tr> <td width="680" height="4" valign="top"></td> </tr> <tr> <td width="680" height="20" class="content_bottom" valign="top"></td> </tr> </table> '; Aizmirsu pieminēt, ka tabulas rāda, bet tekstu attiecīgajās vietās gan nē. Edited December 19, 2009 by wollis Quote Link to comment Share on other sites More sharing options...
briedis Posted December 19, 2009 Report Share Posted December 19, 2009 (edited) Es ļoti pieņemu, ka tam botam ir izslēgti kūkiji, tātad, ja koda sākumā netiek uzstādīta defaultā sesijas lang_id (tas nekas, ka citā lapā tiek), tad tā ir tukša vērtība. (sesijas vērtības netiek padotas starp lapām, ja nav kūkijs, kas satur sesijas id) No tā izvairīties varētu šādi: $session_lang = !empty($_SESSION["lang_id"]) ? $_SESSION["lang_id"] : "defaultaa-valoda"; Edited December 19, 2009 by briedis Quote Link to comment Share on other sites More sharing options...
wollis Posted December 19, 2009 Author Report Share Posted December 19, 2009 Ļoti atvainojos par savu kļūdu, ne no tā faila iekopēts kods. Šeit būs īstais: $lang_id = $_GET["lang_id"]; $cont = $_GET['content']; if($cont != "gallery"){ $q=mysql_query("SELECT * FROM navi WHERE ident = '$cont' AND lang_id = '$lang_id'"); $w=mysql_fetch_array($q); $pluginid = $w['plugin']; $q1=mysql_query("SELECT * FROM plugin WHERE id = '$pluginid'"); $w1=mysql_fetch_array($q1); $db = $w1['db']; $info=mysql_query("SELECT * FROM ".$db." WHERE lang_id = '$lang_id'"); $inf=mysql_fetch_array($info); echo ' <table cellpadding="0" cellspacing="0" width="680"> <tr> <td width="680" height="10" valign="top"></td> </tr> <tr> <td width="680" height="20" class="content_title" valign="top">'.$inf['title'].'</td> </tr> <tr> <td width="680" height="4" valign="top"></td> </tr> <tr> <td width="680" class="content_text" valign="top">'.$inf['text'].'</td> </tr> <tr> <td width="680" height="4" valign="top"></td> </tr> <tr> <td width="680" height="20" class="content_bottom" valign="top"></td> </tr> </table> '; }else{ Varbūt neloģisks, bet nu kādas man tās zināšanas un pieredze ir, tāda nu ir. Quote Link to comment Share on other sites More sharing options...
briedis Posted December 19, 2009 Report Share Posted December 19, 2009 Pirmkārt, tu liec kvērijā mainīgos nevalidējot tos, konkrētāk, tavs kods ir atvērts sql injekcijām. Palasi par funkciju mysql_real_escape_string(); Otrkārt, vai tiešām esi drošs, ka tie GET mainīgie tiek padoti? Un arī, vajadzētu uzstādīt noklusētās vērtības tur kur to var... Quote Link to comment Share on other sites More sharing options...
wollis Posted December 19, 2009 Author Report Share Posted December 19, 2009 Mainīgie tiek padoti, jo lapā strādā, bet bots nenolasa. Par tām injekcijām ir padomāts tikai get nav ierakstīts vajadzīgajā funkcijā. Domu par noklusējumiem gan nesapratu. Quote Link to comment Share on other sites More sharing options...
briedis Posted December 19, 2009 Report Share Posted December 19, 2009 (edited) Mainīgie tiek padoti, jo lapā strādā, bet bots nenolasa. Par tām injekcijām ir padomāts tikai get nav ierakstīts vajadzīgajā funkcijā. Domu par noklusējumiem gan nesapratu. Sākumā tev vajag pārbaudīt vai tie mainīgie eksistē(isset() funkcija). Tad, ja eksistē - pārbaudam db vai ir attiecīgais ieraksts. Ja nav, tad pasakam, ka nav, ja ir - parādam. Ja NEeksistē tie mainīgie, uzstādam noklusētās vērtības (un dabūjam datus no db), vai arī parādam paziņojumu, ka norādīta kļūdaina saite (trūkst vajadzīgo get parametru) if(isset($_GET['lang_id'])){ $lang_id = (int)$_GET['lang_id']; //dabūjam datus no db //ja eksitē ieraksti db - parādam tos }else{ echo "Kļūda!"; } Es nezinu, bet, vai esi 100% drošs, ka tas bots piekļūst tai lapai ar vajadzīgajiem parametriem? Edited December 19, 2009 by briedis Quote Link to comment Share on other sites More sharing options...
wollis Posted December 19, 2009 Author Report Share Posted December 19, 2009 Tas vai mainīgie pastāv tiek pārbaudīts sen pirms tiek pieprasīta informācija no datubāzes. Ja šie mainīgie pastāv url, varbūt derētu viņus saglabāt kur citur. Varbūt mod_rewrite botam neļauj nolasīt pareizi mainīgos. Mēģināšu rīt vēl pastrādāt ar sesijām. Quote Link to comment Share on other sites More sharing options...
2easy Posted December 20, 2009 Report Share Posted December 20, 2009 kad testē lapu priekš botiem, vnk izslēdz javascript un cookies piemēram, iekš firefox 3.5 to var izdarīt šādi: 1) Tools > Options > Content uncheck "Enable JavaScript" 2) Tools > Options > Privacy Firefox will: Use custom settings for history uncheck "Accept cookies from sites" tad redzēsi visu to pašu, ko redz bots. un tad jau var sākt debugot, kāpēc kkas neparādās... Quote Link to comment Share on other sites More sharing options...
wollis Posted December 21, 2009 Author Report Share Posted December 21, 2009 Mans jautājums īsti nebija par to, bet nu paldies, noderēs šā vai tā. Quote Link to comment Share on other sites More sharing options...
2easy Posted December 21, 2009 Report Share Posted December 21, 2009 gan tavs jautājums, gan mana atbilde pēc būtības bija par debugošanu varbūt tu gribēji, lai es pasaku, kurā failā un kurā rindiņā tev tur ir kkāds bugs? dažreiz problēma tiešām ir iepostotajā koda fragmentā, bet dažreiz kkur citur (tur tač ir vesela sistēma), bet dažreiz vnk datu bāzē nav pareizie/expected dati, un lasot postu tos nekādi nevar pārbaudīt. turklāt, kā redzams šajos koda gabalos, tu nemaz nečeko mysql errorus, kā arī nepārbaudi vai vispār kāda rinda tika selectēta (varbūt ir 0 rows?) kr4 dažreiz max, ko var palīdzēt, ir tikai parādīt virzienu, bet jāiet ir tev pašam un man liekas, ka debugojot kko, kas gļučī tikai botam, vajag sākt ar to, ka tu redzi to pašu ko bots 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.