Bonsoir,
Les failles sur les includes viennent bien souvent d'une négligence dans la programmation des pages.
Je pense par exemple à une source de ce genre:
<?php // blah début php
$page = $_GET['page']; // On recup l'argument 'page' depuis l'url
include($page); // Et on inclus directement ce qui est donné en parametre
?>
Il s'agit ici d'une erreur enorme, à ne JAMAIS faire.
En effet dans cet exemple il devient posible pour n'importe qui d'inclure son propre code dans vos pages, autant dire que tout, ou presque, deviens possible.
Un methode simple, mais efficace, pour contourner ce genre de probleme, consiste à passer par "une liste" de pages autorisée (l'utilisation d'une structure
switch est la plus simple a mettre en place)
$page = $_GET['page']; // On recup le nom de la page
switch($page) {
case 'inscription': include('inscription.php'); break;
case 'login': include('login.php'); break;
...
default: include('page_principale.php');
}
Dans cette exemple, seul les cas
truc.php?page=inscription,
truc.php?page=login, et les autres cas traités dans le switch seront inclus. Pour toutes les autres demandes, un page par défaut (
page_principale.php) sera utilisée.
Une sécurité supplementaire pourrait etre de ne pas utiliser le meme nom pour l'argument et pour le fichier, comme ici:
$page = $_GET['page']; // On recup le nom de la page
switch($page) {
case 'inscription': include('5GO0ND.EXT'); break;
case 'login': include('9DLOJU.EXT'); break;
...
default: include('APXH62L.EXT');
}
On peut egalement placer les includes dans un sous dossier protégé par .htaccess
Pour en revenir à ton exemple, php faisant les conversions chaines<=>nombres à la volée, une page du genre
truc.php?test=4ghgcs sera equivalente à
truc.php?test=04. Pour eviter ça, tu pourrais faire quelque chose de ce genre:
$test=$_GET['test'];
if($test == '04' ) {
include 'dossier/page.php';
}
A noter aussi que le code seul:
<?php include ("page.php"); ?>
ne pose aucun problème du moment que la page appellante, et la page incluuse, ne presentent elles meme pas de failles.
Voilà ,je pense avoir répondu à ta question :]
ps: oula, ça c'est du pavé...