Bonjour à tous et à toutes,
J'avais réussis à trouver un petit script super sympa qui me permettait de faire tourner un moteur de recherche sur un site en HTML. Or voilà, je viens d'apprendre que ce dernier n'est pas sécuritaire :-° .
Voici son message :
"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."
Je dois dire que je m'y connais un peu en PHP mais la question sécurité... c'est trop nouveau pour moi. Alors j'ai demandé à mon FAI régulier ce qu'il en pensait de cet avertissement. Il m'a dit que le tout était très relatif puisque OS commerce fonctionnait avec de genre d'architecture.
En définitive, il m'a dit que la source du problème pourrait provenir du code en soi. J'ai demandé à l'auteur mais pas de réponse depuis 4 jours... Voici le code qui provient du site http://homeproduction.free.fr/mysearchengine/index.htm
voici la page mysearch.php
Ensuite la page de configuration
Et la page qui sert à afficher le tout en milieu test
J'aimerais savoir ce que vous pensez de ce code au niveau de la performance et de la sécurité.
Merci beaucoup pour votre aide,
Yan.
Modifié par Felipe (05 Aug 2008 - 17:18)
J'avais réussis à trouver un petit script super sympa qui me permettait de faire tourner un moteur de recherche sur un site en HTML. Or voilà, je viens d'apprendre que ce dernier n'est pas sécuritaire :-° .
Voici son message :
"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."
Je dois dire que je m'y connais un peu en PHP mais la question sécurité... c'est trop nouveau pour moi. Alors j'ai demandé à mon FAI régulier ce qu'il en pensait de cet avertissement. Il m'a dit que le tout était très relatif puisque OS commerce fonctionnait avec de genre d'architecture.
En définitive, il m'a dit que la source du problème pourrait provenir du code en soi. J'ai demandé à l'auteur mais pas de réponse depuis 4 jours... Voici le code qui provient du site http://homeproduction.free.fr/mysearchengine/index.htm
voici la page mysearch.php
<?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");
?>
Ensuite la page de configuration
<?
/* $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 la page qui sert à afficher le tout en milieu test
<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>
";
?>
J'aimerais savoir ce que vous pensez de ce code au niveau de la performance et de la sécurité.
Merci beaucoup pour votre aide,
Yan.
Modifié par Felipe (05 Aug 2008 - 17:18)