interogation !

Nouveau WRInaute
Bonjour!

Je suis en train de monter un site avec les meta-frame et j'ai protegé un dossier avec un .htaccess.

Si je tape :


Code:
http://site.com/index.php?page=dossier/page


La page s'affiche correctement !

Si je tape :


Code:
http://site.com/dossier/page.php


Il me demande un mot de pass (normal c'est ce que je veut)

A present si je ne veut pas que la page toto.php du dossier protegé ne soit lisible en tapant :


Code:
http://site.com/dossier/toto.php


Il me demande un mot de pass (normal c'est ce que je veut)

Par contre si je tape :


Code:
http://site.com/index.php?page=dossier/toto


Il m'affiche la page !!!!!!!!!

Comment faire pour qu'avec les meta frame il n'afiche que ce que je lui demande (soit directement soit par lien) ???????????

D'avance merci
 
WRInaute occasionnel
Ton fichier index.php faut un include($page) directement coté serveur. Donc, la protection par mot de passe (qui se situe au niveau HTTP) n'est pas au même niveau que l'éxécution de ton script PHP...
La seule solution est de proteger ton script pour empecher les gens de se balader n'importe où dans ton arborescence par l'intermediaire de ce script. Si toutes tes pages sont à la racine, ou plutot au même niveau que le script index.php, une solution simple consiste, à l'aide d'une regex, de vérifier si la page demandée contient un caractère '/', auquel cas, tu renvoies une erreur au visiteur un peu trop curieux...
 
Nouveau WRInaute
mes pages ne sont pas toutes a la racine !

Voila le code dans mon index : (si c'est utile)

Code:
if(!isset($page))
{
include("base.php");
}
else
{
if(file_exists("$page.php")) 
{ 
$page = $page.".php";         // Ajout d'une extension .php 
include("$page"); 
}
else
{
include("erreur.php"); 
}
}

Est il possible de faire quelque chose quand meme ?
 
WRInaute occasionnel
Si elles ne sont pas toutes à la racine, il vaut mieux que mettes toutes tes pages à proteger dans un seul repertoire et que tu suives dans ton script cette procédure :

Vérifier si $page commence par le repertoire protégé (pour l'exemple "secret")
Si la page commence par secret, tu renvoies un message d'erreur à l'internaute.
Aussi, pour éviter les combinaisons du style "index.php?page=dossier/../secret/page", il faut aussi que tu interdises les "../" dans les pages inclues.
Quoi qu'il en soit, je te conseille vraiment de mettre des script plus sensible dans un repertoire à part, c'est beaucoup plus facile à protéger (enfin c'est ce que j'en pense...).

(désolé, je ne maitrise pas suffisement bien PHP pour te donner des sources 100% corrects, mais c'est très facilement réalisable à l'aide de 2/3 regexs)
 
Nouveau WRInaute
Le probleme c'est que je manque terriblement de pratique dans le monde du PHP !

Quelqu'un aurait'il un exemple concret a me donner ? ou m'aider a réaliser ce script ?

D'avance merci !

PS : J'ai quand mm regarder les regex et je vais quand mm essayer !
 
WRInaute passionné
Je pense que construire un site sous la forme index.php?page=ma_page c'est pas très judicieux (pour le referencement aussi...)

Pourquoi ne pas faire plutôt :

ma_page.php
*************
include("header.php");

.... (contenu de la page)

include("footer.php");



avec header.php et footer.php qui définissent la carcasse globale de ton site.
 
Nouveau WRInaute
Tout le site est basé sur les pseudo frame et je ne compte pas le modifier pour le moment !

Pour le referencement c'est pas ce que je recherche le plus pour le moment !

En ce qui concerne le regex sois je suis nul sois je suis nul !
J'y perd mon latin !

Il n'ya donc que moi qui veuille fonctionner comme ca ?
 
Nouveau WRInaute
Comment faire pour modifier ca :

Code:
if(!isset($page)) 
{ 
include("base.php"); 
} 
else 
{ 
if(file_exists("$page.php")) 
{ 
$page = $page.".php";         // Ajout d'une extension .php 
include("$page"); 
} 
else 
{ 
include("erreur.php"); 
} 
}

Afin de verifier que le dossier nommé test ne puisse pas etre accessible dans la variable $page ?

Et comment eviter les "index.php?page=dossier/../secret/page" ?

Je n'y arrive pas !!!!!!
D'avance merci
 
WRInaute passionné
remplace
Code:
if(file_exists("$page.php"))
par
Code:
if(file_exists("$page.php") and !eregi("^secret|\.\.\/",$page))
qui vérifie
- l'existense du fichier
- que le nom du fichier ne commence pas par "secret
- que le nom du fichier ne contienne pas ../
 
Haut