Include et page 404

Bonjour à tous,

Je débute en codage et après m’être battue pendant 2 jours avec l’un de mes includes (celui appelant la page dans l’un des cadres du site), j’ai encore un petit souci et cette fois-ci avec ma page d’erreur.

Voici le code que j’utilise :

<?php
if (!isset($_GET['page'])) $page= 'accueil'; else $page= $_GET['page'];
switch($page)
{

case 'accueil': include ('accueil.php'); break;
case 'nomdelapage': include ('dossier/nomdelapage.php'); break;

}

?>

Je voudrais parvenir à afficher la page 404 lorsqu’une page inexistante est appelée.
ex: ww…/index.php?page=nomdunpagequinexistepas => affichage de la page 404.php

Comment dois-je procéder ?
=> je suis très n00b, si vous pouvez m’aider, il faudra me parler lentement XD

Merci à vous pour votre aide.
Ange.
Edité le 25/11/2008 à 20:52

C’est au niveau de la conf du serveur (Apache, IIS, etc) que tu configures ça.

httpd.apache.org…

Gné ? :heink:

faut parler lentement ! :smiley:

Essaye ça si tu es sous Apache :

www.google.fr…

Re-bonsoir,

Une excellente nouvelle pour moi.
J’ai finalement trouvé une alternative sur le forum via le code suivant :

<?php
		 if(empty($_GET['page'])) {
			include("accueil.php");
		 } else {
			 if(file_exists($_GET['page'] . ".php")) {
				include($_GET['page'] . ".php");
			 } else {
				include("404.php");
			 }
			}
?>

Non seulement la page par défaut (l’accueil) s’affiche automatiquement.
Les pages appelées le sont correctement.
Et en cas d’erreur ou de page inexistante, la page 404 s’affiche bien.

À la base j’étais un peu inquiète face à ce code : je sais que les include peuvent ouvrir la porte à des pirates informatiques qui, en bidouillant l’url, peuvent appeler une page extérieure au site.
J’ai donc tenté la manipulation moi-même à partir d’une page d’un site ami : ww…index.php?page=URL
C’est bien la page 404 qui s’affiche.

Donc, même si je n’ai pas reçu d’aide directe, grâce au forum j’ai fini par résoudre mon problème.
J’espère que ma petite expérience pourra en aider d’autres.

Bonne soirée ^^

Comment dire, ce que tu as fait n’est pas bien pour une bonne raison : essaye d’accéder à index.php.

Je sais que c’est débile de faire ça, mais un pirate ne fait pas de choses débiles : il fait ça pour mettre à mal ton système. Là, en faisant ça, tu inclus un fichier (index.php) qui va se réinclure, et pouf au revoir ton site.

C’est limité comme application, car faut bien se dire qu’avec le timeout par défaut de php à 30 secondes, ça prendra que ça, ou ça plantera car plus de RAM, mais tout de même.

Imagines que tu peux le faire sur autre chose, genre des fichiers pas censés être partagés…

Bonjour,

Je viens seulement de voir ton message et j’ai tenté l’expérience …
Effectivement la page s’inclus à l’infini.

N’est-il pas possible d’ajouter un “esleif” bloquant l’inclusion de l’index ?
J’ai un peu chipoté, mais bof bof … :frowning:

Je aussi entendu parler de la méthode consistant à lister toutes les pages, mais très peu pour moi …
=> le site existe déjà (avec un code dégueulasse, d’où le codage à partir de zéro) et on en est à plus de 600 pages !!!

Groumph, m’énerf’
:@

Bon décidément …

En farfouillant sur le site du Zéro, j’ai reconsulté l’article consacré aux Includes.
J’ai testé l’ajout d’un elseif et ça a fonctionné :

<?php
		 if(empty($_GET['page'])) {
			include("accueil.php");
		 } 
			elseif ($_GET['page'] == "index") {
			include("404.php");
			}
			else {
			 if(file_exists($_GET['page'] . ".php")) {
				include($_GET['page'] . ".php");
			 } else {
				include("404.php");
			 }
			}
?>

Ce n’est probablement pas parfait, mais au moins ça fonctionne : l’index se s’inclus plus à l’infini.
D’ailleurs je pense coder une petite page personnalisée autre que la 404 avec un message du style “En voilà une demande bizarre … Tut-tut-tut, pas de ça chez nous !

Je reste bien consciente que celui qui voudra absolument pirater mon site trouvera toujours un moyen.

Voilou ^ ^)

Oui. Mais bon :slight_smile:

SI tu veux tu devrais tester au minimum que le chemin ne revient pas en arrière pas rapport à ton fichier, genre :

/index.php?page=toto/…/…/login

Avec index.php stocké dans le dossier /home/www/public

Cela donne :

/home/www/public/toto/…/…/login.php

Ce que PHP lira :

/home/www/login.php

Et la remarque est la même: tu peux revenir sur ton fichier :slight_smile:

Genre ./index fait planter.

Bonsoir,

Je te remercie de ces précisions.
Là, repartant avec un code tout propre, je ne me suis intéressée qu’au design et aux pages de base.
Mais dès que je passerais aux modules complémentaires, je prendrais soin de suivre ton conseil et de rajouter des “elseif” pour ces sous-dossiers.

Si j’ai bien compris tes explications, avec le livre d’or ça donnerait par exemple :
RACINE DU SITE/livre d’or/PAGE A.php

Et je devrais rajouter un elseif pour :
/livre d’or/PAGE A

Et ainsi de suite pour les autres pages présente dans le dossier “livred’or”


Je fais une petite parenthèse …
J’ai bien du mal à comprendre l’intérêt d’une tierce personne d’agir ainsi.

À la limite qu’on pirate mon site pour bousiller gratuitement mon travail par pure méchanceté, je peux concevoir, mais pour le reste.
Quel serait l’intérêt d’accéder par exemple à mon Livre d’Or. :confused:
Mon site n’est qu’un simple site de fan pour un jeu vidéo, donc je n’ai rien d’intéressant à chaparder, hormis peut-être la liste des e-mails des personnes inscrites à mon mailing d’information à des fins de spamming.

Enfin bref.
Merci beaucoup pour ton aide.

Disons que tu ouvres une porte pour analyser ton site.

Ensuite un vrai pirate ne fera pas quelque chose de forcément visible, par exemple il pourra s’en servir pour accéder au serveur, et uploader des fichiers, et se servir de ton espace d’une façon détournée.

Ceci dit, c’est juste une façon de bien faire. Perso je n’aime pas les pseudo frame (ce que tu as mis en place) pour ça, et pour la clarté du code.

Dans ton cas, tu n’es pas forcé de faire des elseif. Tu peux utiliser la fonction realpath() et vérifier si le chemin commence bien par le chemin du fichier courant (FILE).

Bonjour,

La fonction realpath() je ne connais pas (d’ailleurs je ne connais pas grand chose :stuck_out_tongue: ).
Je vais donc me renseigner à ce sujet.

Une fois encore je te remercie pour toutes tes explications.

Voilou voilou ^^