8792 sujets

Développement web côté serveur, CMS

Bonjour.
Mon site vient d'etre [ hacké ], Il parait que ce seraient les includes qui seraient responsables de l'intrusion, aussi je vous demade d'avoir la gentillesse de m'expliquer le fonctionnement du script que j'ai trouvé mais que je ne comprends pas.
Si je veux que les hackers ne revienent plus j'ai tout interet a comprendre ce que je fais.Voila ce que j'ai trouvé mais je ne vois pas comment il fonctionne. par 'avance je Vous reMerci de vos reponses.


<?php
if(isset($_GET['page']) AND file_exists($_GET['page'].'.php'))
{
include $_GET['page'].'.php';
}
else
{
include 'accueil.php';
}
?> 

Modifié par jp94 (05 May 2006 - 14:57)
Isset sert a recupérer les donnés, en quelque sorte, ca veut dire :

Si ( $_GET['page'] est récupuré et le fichier appelé existe)
alors, inclure $_GET['page']
sinon, inclure accueil.php.

Mettre une donné entre Smiley crochet veut dire la placer dans un tableau. Donc tu recupères le nom de ta page a partir du tableau, et si le fichier existe, alors il est inclu, sinon, il inclu l'accueil.

Donc en fait, pour chaque page que tu essairas d'inclure, il verifira si elle est repertorié dans le tableau, et si ce n'est pas la cas, il n'ouvrira pas la page appelé mais l'accueil.
Modifié par TheReverendEVIL (05 May 2006 - 15:56)
Ton script se décompose en 2 parties:

- le if qui vérifie (belle lapalissade tiens)
- le else qui donne l'aternative.

Avant de passer à l'explication, autant essayer de comprendre ce qui a du se passer chez toi.
Si c'est à cause des includes je suppose que tu avais des adresses du genre:
http://monsite.com?rubrique=tellepage.php
Je ne connais pas le fonctionnement en détail, mais en gros, la personne a du modifier l'url et la remplacer par quelque chose comme
http://monsite.com?rubrique=sapagephpalui.php

En pratique ça doit être un peu plus complexe, je ne me suis jamais amusé a essayer mais sur le principe, il demande à ton site d'executer une page à lui qui va donc faire ce qu'il veut.

L'interet de ton script est donc de "controler" la navigation de tes visiteurs.
if(isset($_GET['page']) AND file_exists($_GET['page'].'.php'))

Cette ligne vérifie deux choses:
- si le visiteur a demandé a voir la page (en cliquant sur un lien de type http://monsite.com/index.php?rubrique=nomdepage)
- ET, c'est la partie qui va te proteger, si le fichier demandé existe. C'est à vérifier, mais à priori, ça va vérifier si la page demandée existe sur le serveur, alors que dans la tentative de hack decrite ci dessus, la page est hébergée chez l'intrus.
- si ces deux conditions sont vérifiées, la page sera affichée via l'include.
Puis, le "else" qui fait que si les deux conditions ne sont pas remplies, on affichera que la page d'accueil.

Accessoirement, l'url rewritting te permettrait de prévenir ce genre de choses. Et tant que tu es dans l'aspect sécurité, je te conseillerais de changer tes mots de passe mysql s'il y en avait vu qu'ils apparaissent dans les pages php (et en clair si tu es chez free...), surtout si ce sont les mêmes que les codes d'accès à ton ftp par exemple.
Ok merci pour vos explications je vois plus clairement la chose. mais selon ce code seules les pages avec ext .php seront inclues ou est-ce je peux mettre des pages html ou text etc...?
Modifié par jp94 (05 May 2006 - 16:10)
Dwarf a écrit :

Si c'est à cause des includes je suppose que tu avais des adresses du genre:
http://monsite.com?rubrique=tellepage.php
Je ne connais pas le fonctionnement en détail, mais en gros, la personne a du modifier l'url et la remplacer par quelque chose comme
http://monsite.com?rubrique=sapagephpalui.php

En pratique ça doit être un peu plus complexe, je ne me suis jamais amusé a essayer mais sur le principe, il demande à ton site d'executer une page à lui qui va donc faire ce qu'il veut.


Et bien non, ce n'est pas plus compliquer. une fois que tu as créer tes pages PHP, si l'include n'est pas sécurisé, il suffit seulement de changer la variable passé, bon, sauf qu'il faut allé chercher la page sur un autre serveur, mais ce n'est pas dur.
Beaucoup de hacker se servent des livres d'or non sécurisé pour hacker des sites. Si le livre d'or accepte le PHP (ils testent avec un simple :

<?php
echo "HelloWorld";
?>


J'ai moi même un magasine ou il donnait le code des pages PHP pirate (et bien sur le code pour ne pas se faire pirater, un simple str_replace salvateur ^^ ).
Mais bon, je ne me suispas amusé a le faire, ent ant que "developpeur", je ne me permettrais pas de faire ce genre de chose alors que je destesterais qu'on me le fasse.

jp94 a écrit :
Ok merci pour vos explications je vois plus clairement la chose. mais selon ce code seules les pages avec ext .php seront inclues ou est-ce je peux mettre des pages html ou text etc...?


Avec ce code, seule les pages .php seront inclusent car l'extansion du fichier n'est pas comprise dans la variable "page" mais est de forme :


$page.".php";


Bon, j'ai simplifier, mais c'est le principe. Donc en fait, il recupère le nom de la page sans extansion, et il rajoute l'extansion.
C'est la forme "concaténé". Je ne sais pas si tu utilises ce système (pour moi indispensable ^^ ). Tu peux avoir des trucs comme :


echo "<img src='../images/".$nomimage."' alt='mon image'>";
 

Modifié par TheReverendEVIL (05 May 2006 - 16:20)
Tiens, la méthode dont je te parlais est décrite ici:
http://www.siteduzero.com/tuto-3-148-1-les-includes.html
(dans la partie 2: la méthode "dangeureuse")

Sinon, je n'ai jamais essayé d'utiliser les include sur autre chose que du php mais je suppose que ça passe avec du html, avec du txt, je ne sais pas.
Au pire, même s'il y a plus propre, rien ne t'empeche de nommer ta page en .php mais de ne mettre que du html dedans.

Auquel cas, tu devras juste modifier le script ainsi:

if(isset($_GET['page']) AND file_exists($_GET['page'].'.EXT'))
{
include $_GET['page'].'.EXT';
}
else
{
include 'accueil.php';
}

Où EXT est l'extension de ton fichier.

Edit: @TheReverendEVIL: merci pour les précisions Smiley cligne moi non plus, je ne permettrais pas d'essayer ! Je bricole juste en php, mais j'ai mieux à faire !
Modifié par Dwarf (05 May 2006 - 16:18)
Bon merci je vais tout reengistrer en .php ca m'amuse pas faut refaire tous les liens mais bon moindre mal. Et sinon aussi avoir qu'un seul repertoire si on doit mettre des stripslashs ?
Si tu utilises un tableau, tu peux avoir des extansions différentes et des repertoires différents.

Pour ca, il faut que tu fasses un truc du genre :


<?php


  $pageOK = array('news' => 'news/news.php',
                  'accueil' => 'accueil.php'
                  'bibi'=> bibi/bibi.htm');

  if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
    include($pageOK[$_GET['page']]);   
  } else {
    include('accueil.php');   
  }

?>


logiquement, ca devrait fonctionner, je n'ai jamais éssayé avec des extansions et repertoires différents, mais je ne vois pas pourquoi ca ne fonctionnerai pas.
Aprés, tes liens seront comme ca :


<a href="index.php?page=accueil" title="L'accueil">Accueil</a>
<a href="index.php?page=news" title="Les news">News</a>
<a href="index.php?page=bibi" title="bibi">bibi</a>


Classique quoi. J'espère que ca fonctionnera et que tu n'auras pas renomé tout tes fichiers avant. Smiley ravi
Modifié par TheReverendEVIL (05 May 2006 - 17:24)
Ok merci ca devrait marcher avec un array j'y avais pas pensé suis assez nul en php.
En tout cas merci bien ca me facilitera le travail.
plus simple et rapide que de tout renommer.php et changer tous les liens.
A+