Un moteur de recherche interne sécure...

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

akinayotaka
Nouveau WRInaute
 
Messages: 47
Inscription: Jeu Avr 26, 2007 2:00

Un moteur de recherche interne sécure...

Message le Mar Aoû 05, 2008 19:11

Bonjour à tous et à toutes,
J'ai trouvé un petit script PHP qui permet d'installer un moteur de recherche sur un site en html sans l'utilisation de base de données. Je trouvais ce script super sympa jusqu'à ce qu'un FAI me dise ceci:

"Je peux vous confirmer que nos serveurs supporte votre application mais uniquement si vous respectez les consignes de sécurité de PHP.
Nous utilisons PHP 5 qui permet l’utilisation de variables globales en « ouvrant » cette possibilité.
Les serveurs supérieurs au nôtre utilisent PHP 6 et dans cette version il est « impossible » d’utiliser les variables globales tel qu’elle sont dans votre code.
Notre serveur réponds aux besoins des clients mais nous nous assurons aussi d’éviter les failles de sécurité afin de répondre aussi aux besoins futurs. Si vous désirez « vraiment » ouvrir cette brèche, des tâches différentes devront être envisagées."

Bon, n'étant pas un crack de la sécurité, j'ai appelé mon FAI régulier et lui ai demandé ce qu'il en pensait. Il m'a répondu que l'utilisation des variables super Globales était mitigé. Que certains le préconisait comme OScommerce et d'autre s'y butait comme le premier FAI cité. Il m'a dit qu'essentiellement c'était une question de propreté de codage or, je ne connais pas le codeur et après 5 jours d'attentes concernant une réponse, je me tourne vers votre expertise.


Croyez-vous que ce code soit sécuritaire ? Et si non, en auriez-vous un de rechange ?
Un petit formulaire fait un POST vers cette page avec la variable search.

Code: Tout sélectionner
<?php
function resum($inputText,$mot)
{
  $inputText=ereg_replace("\n","",$inputText);
  $sauvegarde=$inputText;
  $inputText=strtolower($inputText);
  $position=strpos($inputText,$mot);
  $sposition=$position;
     while (substr($inputText,$position,1)!="."&&$position!=0)
   {
     $position--;
   }
if ($position==0)
   {$position=$sposition;
   }
  $token="....".ereg_replace(",","",substr($sauvegarde,$position,250))."...";
  return($token);
}
include("conf-recherche.php");
if ($elapseTime=false) $elapseTime=0;
$search=trim(strtolower(stripslashes($search)));
while(substr($search,0,1)=="+"||substr($search,0,1)=="*"||substr($search,0,1)=="-")
{
$search=substr($search,1,strlen($search));
}
while(substr($search,strlen($search)-1,1)=="+"||substr($search,strlen($search)-1,1)=="*"||substr($search,strlen($search)-1,1)=="-")
{
$search=substr($search,0,strlen($search)-1);
}
$nombremot=0;
for($compteur=0;$compteur<=strlen($search);$compteur++)
{
  $caractere=substr($search,$compteur,1);
  if($ouvreguillemet==1)
  {
    if ( $caractere=="\"")
    {
      $guillemet=1;
      $ouvreguillemet=0;
    }
    continue;
  }
  else
  if ($caractere=="\"")
  {
    $debutmot=$compteur;
    $ouvreguillemet=1;
  }
  if($caractere==" ")
   {
   if(substr($search,$compteur+1,1)==" "||substr($search,$compteur+1,1)=="+"||substr($search,$compteur+1,1)=="-"||substr($search,$compteur+1,1)=="*")
      {
      $search=substr($search,0,$compteur).substr($search,$compteur+1,strlen($search));
      $compteur--;
      continue;
      }
    if(substr($search,$compteur-1,1)==" "||substr($search,$compteur-1,1)=="+"||substr($search,$compteur-1,1)=="-"||substr($search,$compteur-1,1)=="*")
      {
      $search=substr($search,0,$compteur).substr($search,$compteur+1,strlen($search));
      $compteur--;
      continue;
      }
  else
    {$caractere=$defaut;}
  }
  if($caractere=="+"||$caractere=="-"||$caractere=="*")
  {
    if($nombremot==0)
    {
      if($guillemet==1)
      {
        $motclef[0]=substr($search,1,$compteur-2);
        $guillemet=0;
      }
      else $motclef[0]=substr($search,0,$compteur);
      $operateur[0]=$caractere;
    }
    else
    {
      if($guillemet==1)
      {
        $motclef[$nombremot]=substr($search,$debutmot+1,$compteur-$debutmot-2);
        $guillemet=0;
      }
      else $motclef[$nombremot]=substr($search,$debutmot+1,$compteur-$debutmot-1);
      $operateur[$nombremot]=$caractere;
    }
    $debutmot=$compteur;
    $nombremot++;
  }

}
if($guillemet==1)$motclef[$nombremot]=substr($search,$debutmot+1,strlen($search)-$debutmot-2);
elseif($nombremot==0)$motclef[0]=$search;
else $motclef[$nombremot]=substr($search,$debutmot+1,strlen($search));
for($x=0;$x<$nombremot;$x++)
{
  if($operateur[$x]=="+")$operateur[$x]="&&";
  if($operateur[$x]=="-")$operateur[$x]="||";
  if($operateur[$x]=="*")$operateur[$x]="&&!";
}
if($search==""||isset($search)==0)
{
  include("index.html");
}
else
{
  $CurrentTime=time();
  $irep=0;
  $nb=0;
  for($x=0;$x<=$nombremot;$x++)
  {
    $motclef[$x]=htmlentities($motclef[$x]);
  }
 
  while ($repertoire[$irep])
{
  $url=$repertoire[$irep];
  $rep=opendir("$url");
 
  while($dir = readdir($rep))
  {
    if ($dir == "." || $dir == "..") continue;
    if($dir == "index.php" || $dir == "conf-recherche.php" || $dir == "lib-recherche.php") continue;
   $iext=0;
   $true=0;
   while ($ext[$iext])
     {
      if(strpos($dir, ".".$ext[$iext].""))
         {
         $true=1;
         }
      $iext++;
     }
   if ($true==0) continue;
    if(!($fichier = file($url.$dir)))
    {
      echo "<font face='Verdana' size='2'>Impossible d'ouvrir le fichier $dir</font>";
      continue;
    }
    $fichier = implode($fichier, ",");
    $debut_titre = strpos($fichier, "<title>") + 7;
    $fin_titre = strpos($fichier, "</title>");
    $longueur = $fin_titre - $debut_titre;
    if ($fin_titre != "" && $longueur != 0)
    {
      $titre = substr($fichier, $debut_titre, $longueur);
    }
    else
    {
      $titre = $dir;
    }
   $fichier=strip_tags($fichier);
    for($indexmotclef=0;$indexmotclef<=$nombremot;$indexmotclef++)
    {
      $text=strtolower($fichier);
      $occurance[$indexmotclef]=-1;
     if ($motclef[$indexmotclef]!="")
        {
      do
      {
        $text1=strstr($text,$motclef[$indexmotclef]);
        $occurance[$indexmotclef]++;
        $text=substr($text1,strlen($motclef[$indexmotclef]));
      }
      while ($text1!="");
    }
   }
    $resultat=0;
    if ($nombremot>=1)
    {
      $test="";
      for ($x=0;$x<=$nombremot;$x++)
      {
        $test="$test$occurance[$x]$operateur[$x]";
      }
      $resultat="\$resultat=$test;";
      eval($resultat);
    }
    else
    {
      if($occurance[0]>0)$resultat=1;
    }
    if($resultat==1)
    {
      $nb++;;
      $total=0;
      for ($x=0;$x<=$nombremot;$x++)
      {
        $total=$total+$occurance[$x];
      }
     $urldir=$url.$dir;
      $score[$urldir]=$total;
      $letitre[$urldir]=$titre;
      $extrait[$urldir]=resum($fichier,$motclef[0]);
    }
    for ($x=0;$x<=$nombremot;$x++)
    {
      $occurance[$x]=0;
    }
  }
closedir($rep);
$irep++;
}
}
if ($nb>0)
{
arsort($score);
$titre=fopen("titre.txt","w");
$adresse=fopen("adresse.txt","w");
$resume=fopen("resume.txt","w");
for($x=reset($score);$x;$x=next($score))                     
{
fputs($titre,$letitre[key($score)]);
fputs($titre,"\n");
fputs($adresse,key($score));
fputs($adresse,"\n");
fputs($resume,$extrait[key($score)]);
fputs($resume,"\n");
}
fclose($titre);
fclose($adresse);
fclose($resume);
}
$debut=0;
$elapseTime=time()-$CurrentTime;
include("affichage.php");
?>


Dans les include on a ce fichier de configuration
Code: Tout sélectionner
<?
/* $url[] est un tableau qui contient les chemins des repertoires dans lesquels vous  **
** souhaitez que la recherche s'effectue (attention[!], vous **
** ne pouvez pas mettre une adresse de type http:// ou toute **
** autre adresse internet, mettez par rapport au répertoire  **
** courant). Vous devez modifier ces paramêtres pour qu'ils correzspondent à la structure de votre site web */
$repertoire[0]= "../";
//$repertoire[1]="../mysearch/";
/* Indiquez ici le type de fichier dans lequel vous voulez **
** rechercher. (ex : 'htm')                                */
$ext[0]="htm";
$ext[1]="php";
$ext[2]="html";
/* defaut correspond au critere que représentera un espace entre deux mots clefs
il peut être égal à +pour "et", - pour "ou" et * pour "sauf". Ici il est  égal à et*/
$defaut="+";
/* nombreresultats indique le nombre de résultat affichés par page*/
$nombreresultats=10;
?>


Et puis le tout s'affiche dans cette page (temporaire car modifiable à souhait)
Code: Tout sélectionner
<HTML>
<HEAD>
<title>Résultats de le recherche</title>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<META http-equiv="Content-language" content="fr">
<META name="Author" content="Serge Nicolas">
<META name="Copyright" content="Pharmacie du sablon">
<META name="Rating" content="general">
<META name="Revisit-after" content="7 days">
<META name="Robots" content="index, follow">
</HEAD>
<link rel="stylesheet" href="styles.css">
<BODY bgcolor="#CCFFCC">
<?
include("conf-recherche.php");
/*on recupere les données*/
if (!$elapseTime) $elapseTime=0;
$titre=file("titre.txt");
$adresse=file("adresse.txt");
$resume=file("resume.txt");
print"
<br>
<br>
<table width=100% bgcolor='339966'>
<tr >
<td align='left' class='lien'>

Recherche :$search

<td class='lien'>";
$affiche=$debut+1;
print"
Résultat";
if($nb>=2)print "s : $debut - "; else print": $debut - ";
if ($nb<$debut+$nombreresultats) print "$nb";
else {
   $affiche=$debut+$nombreresultats;
   print "$affiche";}
print"
</td>
<td class='lien'>
La recherche a pris $elapseTime seconde";
if ($elapseTime>=2) print"s."; else print".";
print"
</td>
</td>
<td align='right' class='lien'>

$nb";
if($nb>=2) print" Résultats trouvés"; else print" Résulat trouvé";
print"
</td>
</tr>
</table>
<br>
";
if($nb == 0)
        {
        print "<p class='corps'>Votre recherche -".$search."- ne correspond à aucun résultat.<br><br><ul><li class='corps'>Assurez vous d'orthographier correctement tous les mots.<li class='corps'>Essayez d'utliser moins de mots.<li class='corps'>Essayez d'utiliser des mots plus généraux.</ul><br></p>";
        }
else
        {
                $affichei=$debut+1;
                for ($i=$debut;$i<$debut+$nombreresultats;$i++)
                        {
                         if($titre[$i])
                                {
                                print("<span class='corps'><b>$affichei></b><a href='$url$adresse[$i]'>$titre[$i]</a></span> <br><font size='-2'>$adresse[$i]</font><br>");
                                print ("<span class='corps'<i>$resume[$i]</i></span><br><br>");
                                }
                                $affichei++;
                        }
                print"
                  <center>
                        <table>
                        <tr>
                  <td  align='right'>";
                   if($debut>0)
         {
                      $precedent=$debut-$nombreresultats;
                      print"
                         <a href='affichage.php?nb=$nb&debut=$precedent' class='lien'><img src='images/precedent.gif' border='0'></a>
                         ";
         }
               print"
               </td>
               <td  align='center'>
               <img src='images/search2.gif'>
               </td>
               <td align='left'>
                  ";
               if($debut+$nombreresultats<$nb)
         {
                     $suivant=$debut+$nombreresultats;
                     print"
                        <a href='affichage.php?nb=$nb&debut=$suivant' ><img src='images/suivant.gif' border='0'></a>
                        ";
         }
               
               print"
               </td>
               </tr>
               <tr>
               <td align='center'>
                  ";
                if($debut>0)
                        {
                        print"
                        <a href='affichage.php?nb=$nb&debut=$precedent' class='soustitre'>Précédents</a>
                                ";
                        }
            print "</td>
            <td  align='center'>";
            $page=1;
            for($i=0;$i<$nb;$i=$i+$nombreresultats)

         {
               print "
                  
                  <a href='affichage.php?search=$search&debut=$i&nb=$nb' >$page</a>
                  
                  ";
               $page++;
         }
         print"</td><td  align='center'>";
            if($debut+$nombreresultats<$nb)
         {
                     $suivant=$debut+$nombreresultats;
                     print"
                        <a href='affichage.php?nb=$nb&debut=$suivant' class='soustitre'>Suivant</a>
                        ";
         }
                  print"
                  </td>
                        </tr>
                        </table>
                  </center>
                        ";
                }
print"
<br><br>
<center>
<span class='corps' fontsize='-1'><a href='../mysearch/accueil.htm'>A propos de la recherche </a> - <a href='astuces.php'> Astuces pour la recherche</a>
</center>
<br><br>
";
?>


Le code provient de cet endroit :
http://homeproduction.free.fr/mysearchengine/index.htm


Merci infiniment pour vos réponses.
Yannick.[/code]

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

  • Calculer le ratio de liens profonds
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
  • Logiciel d'analyse du positionnement
    AgentWebRanking est un logiciel professionnel qui permet d'analyser le positionnement d'un ou plusieurs sites dans plus de 300 moteurs de recherche dans le monde. Vous pouvez ainsi analyser les performances du référencement pour de nombreux mots-clés.
  • Transformer des textes non cliquables en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités