Formation Google AnalyticsSavez-vous bien utiliser les outils de mesure d'audience ?
Effectuez-vous un calcul de ROI (Retour sur investissement) pour savoir comment améliorer vos campagnes emarketing ?
Savez-vous utiliser les bons outils pour booster votre taux de transformation ?
La formation Web Analytics de Ranking Metrics, présentée par un expert reconnu officiellement par Google Analytics, vous apportera les réponses à toutes vos questions !
===> Informations et inscriptions.

Un moteur de recherche interne sécure...

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
akinayotaka
Nouveau WRInaute

Inscrit le: 26 Avr 2007
Messages: 43
Localisation: lac st jean québec

URL permanente de ce messagePosté le : Mar Aoû 05, 2008 19:11    Sujet du message: Un moteur de recherche interne sécure...

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:

Citation:
"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:

<?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:

<?
/* $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:

<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]
 
akinayotaka
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort