Probleme d'include a partir d'un index.php?page=x [Résolu]

Signaler
-
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
Bonjour,

j'ai un probleme avec se script qui affiche en fonction de x
dans index.php?page=x affiche la page x.php en include si 'page' est
inexistant, alors il affiche une page par defaut. Seulement j'ai un
message d'erreur qui apparait qui est celui-ci :





<hr style="width: 100%; height: 2px;">Notice: Undefined variable: page in c:\program
files\easyphp1-7\www\photo\anniv_alex01\index.php on line 21



<hr style="width: 100%; height: 2px;">

ça c'est si l'adresse est : http://localhost/index.php


si l'adresse est http://localhost/index.php?page=new j'ai bien la page
new qui s'inclue dans la page index




voici le bout de script :



<hr style="width: 100%; height: 2px;"><?


if ($page=="")


{


$page="accueil";


}


$page_inc=$page.'.php';


include("$page_inc");


?>



<hr style="width: 100%; height: 2px;">

Si quelqu'un a une idée.


Merci





Simon

7 réponses

Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Alors avant tout remplace tes <? par des <?php ça respectera plus
les standard (en cas de short_open_tag à off) et utilise
$_GET["ma_var"] pour les variables transmise via l'url... plutot que
$ma_var... .. .



ensuite il est normal que ta page par défaut ne soit pas incluse car
comme l'indique la notice au moment de ta condition ta variable
n'existe pas... elle ne peut donc même pas être égale à rien... .. .



tu met $page = ''; au tout début et ce sera ok... mais par contre
niveau sécu y a rien... tu fais quoi si je tape
http://www.tonsite.ext/index.php?page=http://www.monsite.ext/un_script_pas_gentil_du_tout.php
et ce n'est qu'un exemple... si tu utilise une base de données on peut
faire de bonne injections sql aussi...et j'en passe... .. .



Un conseil fais plutot quelque chose style...



// déja on initialise la var

if(isset($_GET["page"])) {

$page = trim($_GET["page"]);

} else {

$page = '';

}



//si elle est appelée et quelle est vide

if(isset($page) && $page == '' ) {

$page = 'page_defaut';

}



// on vérifie que la requete ne contient pas de caractère interdit => activ scripting...

// on accepte donc que les characteres alpha numériques ainsi que les . - _ rien d'autre

$page = htmlspecialchars($page);

$masque = "^[_a-zA-Z0-9.-]+$";



if(!ereg($masque, $page) {

$page = 'page_defaut';

}



// on vérifie que la page existe bien sait on jamais

if(!file_exists("rep".$page.".php") {

$page = 'not_found';

}





////// à partir de là deux solutions//////////





/// tu as pas 15 000 pages dans ce cas on fait un switch



switch($page) {



case "not_found" :

include("rep/error.php");

break;



case "page_par_defaut" :

include("rep/defaut.php");

break;



case "mapage1" :

include("rep/bla_bla.php");

break;



case "mapage2" :

include("rep/pwet_pwet.php");

break;



}



// tu peux en mettre autant que tu veux mais si tu en

// a beaucoup c'est plus chiant donc tu peux faire à la place...



// on fait un tableau avec les pages autorisées

$page_list = array("page1", "page2", "page3", "page4", "page5",
"page10", "page20", "page50", "page75", "page_defaut", "not_found");



// on vérifie qu'elle est dedans

if (!in_array($page, $page_list)) {

$page = 'page_defaut';

}



// et on inclu notre page

include("rep/".$page.".php");



Comme tu l'aura remarqué l'extension n'est pas renseigné dans la var ce
qui permet de faire le tri et de n'inclure que la bonne extension et
puis c'est plus propre de voir index?page=pwet



Sinon les pages sont dans un repertoire ici nomé rep dans lequel tu met un .htaccess avec dedans



AuthName "admin"

AuthType Basic

<Limit GET POST>

Deny From All

</Limit>



Ce qui empechera l'accès direct au page à tout le monde même toi (toi
tu passera via ftp) ainsi elle ne seront consultable que via l'index.php



Voila... ce code est netement améliorable j'ais fais ça de tête, tu
pourras trouver d'autres trucs pour le fignoler sur ce site (je me suis
d'ailleur "inspiré" d'une source qui est je crois sur ce site
concernant le masque) et sur d'autres site... notament pour ce qui
concerne la sécurité mais c'est déja un peu mieux que celle de ton
code... .. .



Bonne continuation à toi... .. .



@ tchaOo°


l'homme est un loup pour l'homme... .. .
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



un simple if(isset($_GET['page']) AND file_exists($_GET['page'].'.php'))

{


include $_GET['page'].'.php';

}



inutile de faire des tests de caractères couteux en perfs vu que t'as la fonction file_exists.



a +


Vulgarisation informatique : Entraide, dépannage et vulgarisation informatique

Forum d'ent
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Bonsoir, ou plutôt Bonjour,

Oula, c'est vraiment pas securité tt ca !

alors :

<?php

$page = isset($_GET['page']) ? $_GET['page'] : '' ;

if($page 'accueil') { $include 'accueil.php'; }

else if($page 'news') { $include 'news.php'; }

else { $include = 'accueil.php'; }

include($include);

?>

Voila, c'est deja mieux !

Ton message apparait, car $page n'existe pas ! ici on test si il existe sinon on lui donne une valeur. [javascript:Insert_Emoticon('./imgs2/smile_big.gif'); ]



<hr>
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Y a de l'echo... mdrrrr... .. .



@ tchaOo°


l'homme est un loup pour l'homme... .. .
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

T'es sûr que c'est vraiment inutile... en cas de tentative d'écriture via l'url... .. .

Enfin je sais pas... t'en sais plus sûr le php que moi... et compte
tenu de ça j'ais préféré deux sécu plutot qu'une... par les temps qui
courent... muarf... .. . ;o)



@ tchaOo°


l'homme est un loup pour l'homme... .. .
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Bah ton type de vérif n'est utile que si tu fais appel à une base ou si
tu fais directement "include $_GET['page'].'.php'; (enfin bon là faut
être suicidaire)



bref le file_exists() empêche toute tentative de fraude de ce côté là.



a +

Vulgarisation informatique : Entraide, dépannage et vulgarisation informatique

Forum d'ent
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Merci bien... me coucherais moins con ce soir (comme tout les soir... )... .. .



@ tchaOo°


l'homme est un loup pour l'homme... .. .