probleme d'inlcude PHP

WRInaute discret
BONJOUR
j'ai un site internet -http://elishaonly.free.fr/
et j'ai un probleme avec les includes
comment fr pour par exemple une page qui n'utilise pas l'include.. enfin.. si elle l'utilise mais la page inclu est inexistante par exemple ici:
-http://elishaonly.free.fr/index2.php?name=1222
comment fr pour quand meme affiché une page inclué dans le design, en disant un truc style: cette page est inexistante etc... etc...
Merci pr votre aide
si vous avez le code php/html sa m'aidrai ;)
 
WRInaute discret
merci pr ta reponse :)
Par contre moi j'ai ce code pr l'include, tu serai l'adapter ?
<?
$name = isset($_GET['name']) && ereg("^[a-zA-Z0-9\-\_]+$",$_GET['name'])? htmlentities($_GET['name']) : "accueil";
include("./".$name.".php");
?>
 
WRInaute accro
Pousicath a dit:
merci pr ta reponse :)
Par contre moi j'ai ce code pr l'include, tu serai l'adapter ?
<?
$name = isset($_GET['name']) && ereg("^[a-zA-Z0-9\-\_]+$",$_GET['name'])? htmlentities($_GET['name']) : "accueil";
include("./".$name.".php");
?>

Code:
$name		=		isset($_GET['name']) && ereg("^[a-zA-Z0-9\-\_]+$",$_GET['name'])? htmlentities($_GET['name']) : "accueil";
if (file_exists("./".$name.".php")) {
   include "./".$name.".php";
} else {
   print "désolé ya pas ma page";
}
 
WRInaute discret
merci beaucoup ca marche nickel
jsui dsl encore de vous enquiquiné, mais serai til possible que ds le print on puisse charger une page web ? car un simple txt...
 
WRInaute discret
Malgré le contrôle rigoureux qui est effectué sur $_GET['name'] je te déconseille fortement d'utiliser une variable dynamique pour faire ton include, fait plutôt plusieurs if ou utilise un switch.

De plus dans le cas présent "htmlentities" sert à rien, car il ne peut pas y avoir de balises html vu l'expression régulières utilisées.

Donc en résumé fait plutôt :

if ($_GET['name'] == "accueil")
include("accueil.php");
elseif ($_GET['name'] == "user")
include("user.php");
($_GET['name'] == "forum")
include("foruml.php");
etc...

Ca sera bien plus sécurisé.
 
WRInaute accro
ou tout simplement forcer un chemin avant;

Code:
$monchemin = '/la/parla/';

if (file_exists($monchemin.$_GET['name'].'.php')) {
   include $monchemin.$_GET['name'].'.php';
} else {
   print "désolé ya pas ma page";
}
 
WRInaute discret
ok merci pour vos conseils, mais pour l'instant je veux rien changer au code a par inclure une page php et non une phrase, si quelqu'un a le code :'P thx
 
WRInaute discret
Moi je ne te le donnerais pas, car je ne veux pas encourager une programmation qui est sujet à failles.

thierry8 avec ./ devant le fichier il le fait déjà.
 
WRInaute accro
arf ! ok..

ben alors j'ai du mal à voir ou est-ce qu'il peut y avoir une faille...?
( à partir de moment ou l'on force un répertoire.. )
 
WRInaute discret
Bah déjà, il suffit qu'il y ai une faille ailleurs qui te permet d'uploader un fichier, et bam il peut l'inclure comme il veut juste en mettant ?name=sonfichier.

Et sûrement tout un tas d'autres trucs, comme je dis, c'est bien trop potentiel à des failles car on évolue dans un univers non contrôlé.

Imagine qu'il ajoute la page Y.php 1 mois plus tard en oubliant son histoire d'include. On va encore une fois pouvoir faire ?name=Y alors que son code n'était pas du tout prévu pour, ce qui peut encore engendrer bien d'autres problèmes.

Il faut toujours évoluer dans un univers contrôlé au maximum, ici il ne l'est pas du tout. La bonne solution c'est de faire comme je dis.

Ou à la limite un truc du genre :
$mesincludes = array("accueil", "forum", "news");
if (in_array($_GET['name'], $mesincludes))

Mais là encore tu évolues dans un univers contrôlé.
 
WRInaute accro
humm ok mais tout est lié.

déjà il faut une faille ailleurs permettant le upload sur le serveur.

ensuite en principe les fichiers php pour lesquels tu fait un include tu les mets dans un répertoire n'ayant que le droit de lecture, ainsi impossible de créer un fichier / dossier dans ce répertoire, donc aucun risque d'inclure un fichier pirate. (il me semble, non ?)
 
WRInaute discret
En théorie "oui".
Sauf que, déjà si tu fais une gourde tel que include ./$a, même si tu fais un contrôle sur $a, il n'est pas rare que ./ ne soit pas en lecture seul (c'est même courant - oui les scripts qui te demandent de passer en 777 pour l'installation, 80% des gens oublient de repasser en normal après).

Et pour le problème d'upload c'est vite vu, tu installes un script annexe, un forum, et tu peux être très rapidement confronté à ce genre de problème.

De même j'ai parlé ici d'une faille concernant l'upload d'un fichier propre. Mais qui te dit que l'on ne va pas découvrir dans les prochains mois une faille pour injecter quelque chose pour modifier le path de ton include ?

Comme je l'ai dit, théoriquement son exemple ne pose pas de problème, car il effectue un contrôle assez rigoureux sur la variable. Mais cependant, on évolue toujours dans un univers libre, non restreint. Et c'est ainsi que l'on se tape 80% du temps des failles auxquels on n'avaient pas pensé. Comme je l'ai par exemple expliqué avec le fichier Y.php que l'on créer un mois plus tard.

Edit :
Je rajouterais, si toi ça ne te fait pas peur, ou ne te pose pas de problème que quelqu'un puisse include n'importe lequel de tes fichiers dans un autre, moi si. Car là actuellement c'est le cas.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut