Page 1 sur 1

Faille include

Posté : 24 avr. 2006, 13:12
par Florent
Bonjour
J'ai un site où j'inclus mes pages comme ceci :
if(isset($_GET['page']) AND file_exists($_GET['page'].'.php')){
	
	include $_GET['page'].'.php';
	}
else {include('acceuil.php');}
Et si dans l'url je fais par exemple index.php?page=../un fichierexistant

donc d'un autre répertoire, il s'inclut bien.
Je me demande comment éviter ça ?
En clair comment faire pour que le fichier à inclure soit existant, mais dans le dossier en cours...

Autrement qu'en faisant un truc de ce style :
if ($page == connection) {include('connection.php;}
if ($page == fichier) {include('fichier.php;}
etc...
parceque la liste serait longue.
Merci

Posté : 24 avr. 2006, 13:15
par zeus
Tu vérifie qu'il n'y ai pas le caractère \ dans l'url

Vu que c'est le séparateur dans une url, s'il n'est pas présent, c'est qu'on est dans le même répertoire

Posté : 24 avr. 2006, 14:29
par mere-teresa
Ou de caractère /

Posté : 24 avr. 2006, 14:31
par zeus
Ou de caractère /
:oops: autant pour moi

Posté : 24 avr. 2006, 14:49
par mafio
Salut,

Perso, j'utilise une methode qui marche bien lol :

voici le code
<?php

if(isset($_GET['page']))
{
include('/pages/'.$_GET['page'].'.php');
}

?>
En fait je place juste toutes les pages de mon site dans un repertoire, et perso sa marche bien, enfin moi je propose sa, mais c'est a toi de voir

ou sinon la methode que jutilisai au debut, ( phpdebutant )

on créé un tablo avec toutes les pages autorisé

et apres on verri si la page se trouve bien dans le tableau, si oui, on l'inclu

http://phpdebutant.org/article68.php

Voila j'espere t'avoir aidé

Posté : 24 avr. 2006, 17:58
par Invité
Tu vérifie qu'il n'y ai pas le caractère \ dans l'url
Et oui en fait c'est tout c**

Mais là il s'agit d'une partie que je ne maitrise vraiment pas, alors je ne sais comment faire.
Pourriez vous me dépanner, ou m'indiquer où je peu trouver un petit "cours" là dessus ?

En tout ca merci beaucoup.

Posté : 24 avr. 2006, 18:52
par Florent
Désolé pour le message précédent, j'ai pas vu que je n'étais pas connecté.

Au final j'ai fais ça :
if (eregi("/",$_GET['page'])){include('acceuil.php');}
else {
	if(isset($_GET['page']) AND file_exists($_GET['page'].'.php')){
		include $_GET['page'].'.php';
		}
	else {include('acceuil.php');}
}
Ca fait pas terrible mais ça marche. :roll:

Posté : 24 avr. 2006, 20:14
par mafio
 <?php

if(isset($_GET['page']) && file_exists('/pages/'.$_GET['page'].'.php'))
{
// On place toutes les pages du site dans le repertoire /pages
include('/pages/'.$_GET['page'].'.php');
}
else
{
include('home.php');
}
?>
Je pense que c'est une des meilleurs solution niveau securité, enfin a toi de juger

Posté : 25 avr. 2006, 09:34
par zeus
@mafio : et si je donnes la valeur '../autre/rep/fichier.php' :?: ça va fonctionner sauf qu'on sort du répertoire page ;)

Je pense que la détection du caractère / est indispensable

Ensuite, pour une simple recherche de caractères, strpos() sera plus performant que eregi()
if (strpos("/",$_GET['page']) === FALSE){
  include('acceuil.php');
} else {
    if(isset($_GET['page']) AND file_exists($_GET['page'].'.php')) {
        include $_GET['page'].'.php';
    } else {
      include('acceuil.php');
    }
}

Posté : 25 avr. 2006, 10:26
par Ryle
Personnellement, ce n'est pas le caractère "/" que je recherche, mais les "../" (voire juste "./").

Cela me permet de structurer le dossier dans lequel sont les pages avec d'éventuels sous dossier (plus pratique à mon sens pour m'y retrouver dans mes pages :)).

La variable $_GET['page'] peut ainsi prendre la valeur dossier/page pour aller chercher la page "page.php" du dossier "dossier", mais jamais remonter dans les dossier parents :)

Posté : 26 avr. 2006, 07:03
par Florent
Bonjour
pour une simple recherche de caractères, strpos() sera plus performant que eregi()
J'étais donc pas loin.
Merci à tous.

Posté : 26 avr. 2006, 09:25
par zeus
@Ryle : pas con ton idée :-k

J'aime bien. On pourrait se limiter à la recherche de './' ('../' etant inclu) et on peut permettre une arborescence.