Jump to content
php.lv forumi

Problēma ar botu


wollis

Recommended Posts

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 by wollis
Link to comment
Share on other sites

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 by briedis
Link to comment
Share on other sites

Ļ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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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 by briedis
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...