|
|
|
|
Bonjour,
J'ai cherché pas mal de choses sur la faille de l'include, afin de résoudre cet éventuel problème, mais je n'ai pas trouvé LA solution.
J'aimerais savoir comment sécuriser ce type de code :
<?php include ("page.php"); ?>
Et :
$test=$_GET['test'];
if($test ==04)
{
include 'dossier/page.php';
}
Meci d'avance
In every Hero, there could be a Villain...Configuration: Windows Vista
Firefox 3.0.1
Bonsoir,
<?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é... |
Bonjour, et merci pour ta réponse très instructive.
$test=$_GET['test'];
if($test ==01)
{
include 'dossier/page1.txt';
}
$test=$_GET['test'];
if($test ==02)
{
include 'dossier/page2.txt';
}
$test=$_GET['test'];
if($test ==03)
{
include 'dossier/page3.txt';
}
$test=$_GET['test'];
if($test ==04)
{
include 'dossier/page4.txt';
}
Est-ce suffisant niveau sécurité, si je fais un lien du type ? test.php?test=01 ? Et une dernière question, en ce qui concerne la technique du .htaccess, que faudrait-il que je mette pour sécuriser les fichiers ? J'ai déjà modifier un paramètre dans php.ini Merci Merci d'avance In every Hero, there could be a Villain...
|