Faille include()
Profil bloqué
-
Profil bloqué -
Profil bloqué -
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
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
A voir également:
- Faille include()
- Faille outlook - Accueil - Mail
- Faille web - Accueil - Piratage
- Faille de sécurité - Accueil - Piratage
- Faille - Guide
- Faille family link ✓ - Forum Huawei
3 réponses
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:
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)
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:
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:
A noter aussi que le code seul:
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é...
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é...
Bonjour, et merci pour ta réponse très instructive.
J'ai lu attentivement ton message, et je pense avoir bien compris le fonctionnement.
Avec mon exemple :
$test=$_GET['test'];
if($test ==04)
{
include 'dossier/page.php';
}
=> Qui n'est pas sécuriser ?
_Epxposition du problème :
On dit que $tes accepte des nombres de 01 à 04.
Si je veux include un fichier -.txt a chaque fois, est-ce que je laisse :
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
J'ai lu attentivement ton message, et je pense avoir bien compris le fonctionnement.
Avec mon exemple :
$test=$_GET['test'];
if($test ==04)
{
include 'dossier/page.php';
}
=> Qui n'est pas sécuriser ?
_Epxposition du problème :
On dit que $tes accepte des nombres de 01 à 04.
Si je veux include un fichier -.txt a chaque fois, est-ce que je laisse :
$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
Dans ce cas, il n'y a pas a proprement parler de faille de sécurité.
Seulement des ambiguité sur le traitement de certaines pages (comme par exemple test.php?test=3bhcd qui serait equivalente à test.php?test=03)
Pour éviter ces ambiguité, utilise plutot des chaines pour les comparaisons.
if($test == '04') plutot que if($test == 04)
L'utilisation d'un switch simplifiera la lecture (et tres legement la vitesse d'execution du script), et permettra d'assigner une page par defaut à afficher en cas d'argument corrompu.
Ensuite pour proteger le dossier contenant tes includes, il suffit de creer un fichier .htaccess et de mettre dedans:
Seulement des ambiguité sur le traitement de certaines pages (comme par exemple test.php?test=3bhcd qui serait equivalente à test.php?test=03)
Pour éviter ces ambiguité, utilise plutot des chaines pour les comparaisons.
if($test == '04') plutot que if($test == 04)
L'utilisation d'un switch simplifiera la lecture (et tres legement la vitesse d'execution du script), et permettra d'assigner une page par defaut à afficher en cas d'argument corrompu.
$test=$_GET['test'];
switch ($test) {
case '01': include('dossier/01.txt'); break;
case '02': include('dossier/02.txt'); break;
case '03': include('dossier/03.txt'); break;
case '04': include('dossier/04.txt'); break;
default: include('dossier/erreur.txt');
}
Ensuite pour proteger le dossier contenant tes includes, il suffit de creer un fichier .htaccess et de mettre dedans:
order allow,deny deny from allIl suffit ensuite de mettre ce fichier dans le dossier à proteger.