OVH Cloud OVH Cloud

pseudo frames !! ?

4 réponses
Avatar
Julien R (PROTEG)
bonjour ,

je suis pas expert en php, et j'ai actuellement mis ce script sur un site
dans une page index.php de manière à pouvoir afficher un menu différent à
chaque fois que l'on clic sur unre rubrique en haut de la page !!

hors je crois qu'il y a un trou de sécurité justement ...

et en plus à cause des variable globales à OFF ... je dois changer tout ça
!!


voici le code que je voudrais changer à cause du trou de sécurité

<?php

$l1 = eregi_replace("http://", "", $l1);

if(!isset($l1) OR empty($l1)) // vérifie que la variable $url existe et
qu'elle n'est pas vide.
{
include("menuaccueil.php");
}
else
{
include("$l1.php");
}

?>

maintenant avec les variables GLOBAL à OFF

j'ai ce code :

<?php

$l1 = eregi_replace("http://", "", '$l1');

if(!isset($_POST['l1']) OR empty($_POST['l1'])) // vérifie que la
variable $url existe et qu'elle n'est pas vide.
{
include("menuaccueil.php");
}
else
{
$l1=$_POST['l1'];
include("$l1");
}

?>

le pb est que depuis que j'ai cette modification , les menus ne s'affiche
pas ...

j'ai regarder sur le site de phpdebutant et il parlent des pseudos frames,
j'ai alors fait comme ils disent mais il expliquent de mettre chaque page
autorisé avec la fonction array dans l'index .... si qqun pouvait me donné
un tit coup de pouce ce serait certainement pas de refus !!

Merci pour votre aide !

--

-
@++
Julien R
Site : http://www.proteg.net

4 réponses

Avatar
Kevin
bonjour ,


Salut,


$l1 = eregi_replace("http://", "", $l1);
mhh ici il faut utiliser $_POST aussi...

$l1 = eregi_replace("http://", "", $_POST['l1']);




if(!isset($l1) OR empty($l1))
a mon avi elle existera forcement puisqu'elle est affectée au resultat

d'un eregi_replace

else
{
include("$l1.php");
}
inutilie d'utiliser $_POST[] car $l1 est assignée au resultat d'un

ereg_remplace sur $_POST['l1']


de plus cette maniere ne "proteger", protege uniquement contre les
includes "distants"... (rien n'empeche en effet d'acceder a des
.htaccess locaux...)


t'es sur qu'il faille utiliser $_POST deja??
ca n'est pas faux non, mais ca ne s'applique qu'aux formulaires...
j'ai laissé quand meme des fois que tu travailles avec des formulaires
(si tu fais des liens genre http://tonsite/page.php?l1=page2 ca ne peut
donc pas marcher, il faut remplacer tous les $_POST par des $_REQUEST...)


la methode la plus efficace consiste encore a faire des liens du style

http://tonsite/element.php?q=0
http://tonsite/element.php?q=1
http://tonsite/element.php?q=2
...

et de faire un tableau dans element.php qui liste les elements que tu
veux reelement include...

<?
// index 0 1 2 ...
$inc = array("page.php","prog.php","quesaisjeencore.php",...);
$q=$_REQUEST['q'];

if(!is_int($q))
{
include("pagepardefaut.php");
}
else
{
include($inc[$q]);
}
?>

en conclusion le gars aura beau essayer de passer
http://tonsite/element.php?q=http://www.google.fr
ca ne changera rien

voila :)

Bonne journée

Kevin


--
Coders don't die... They just JMP without RET

Avatar
Olivier Miakinen
Le 31/08/2004 08:57, Kevin répondait à Julien R :

$l1 = eregi_replace("http://", "", $l1);
mhh ici il faut utiliser $_POST aussi...

$l1 = eregi_replace("http://", "", $_POST['l1']);

if(!isset($l1) OR empty($l1))
a mon avi elle existera forcement puisqu'elle est affectée au resultat

d'un eregi_replace


En effet. Le test sur isset doit donc être fait au tout début :

if (!isset($POST['l1'])) {
$l1 = '';
} else {
$l1 = eregi_replace("http://", "", $_POST['l1']);
if (! (tests agressifs pour voir si ce paramètre est admis)) {
$l1 = '';
}
}

if ($l1 === '') {
include("menuaccueil.php");
} else {
include("$l1.php");
}

Mais le conseil de Kevin comme quoi tu (Julien) dois plutôt calculer les
noms de fichiers toi-même est excellent. À suivre.


Avatar
Julien R (PROTEG)
Merci Kevin pour le post, j'attend de retrouver ma ligne internet dans le
courant de la semaine pour refaire tout ça bien .. mais je reposterais pur
m'assurer que j'ai bien recpier le code que tu ma conseiller ....


autrement pour toi Olivier lorsue tu me dis de calculer les noms de fichiers
?? c à dire ?

mettre toutes les pages autorisé dans un tableau array ??

--


-

@++
Julien (PROTEG.NET)
E-mail :
Site : http://www.proteg.net



"Olivier Miakinen" <om+ a écrit dans le message de
news:ch193v$109e$
Le 31/08/2004 08:57, Kevin répondait à Julien R :

$l1 = eregi_replace("http://", "", $l1);
mhh ici il faut utiliser $_POST aussi...

$l1 = eregi_replace("http://", "", $_POST['l1']);

if(!isset($l1) OR empty($l1))
a mon avi elle existera forcement puisqu'elle est affectée au resultat

d'un eregi_replace


En effet. Le test sur isset doit donc être fait au tout début :

if (!isset($POST['l1'])) {
$l1 = '';
} else {
$l1 = eregi_replace("http://", "", $_POST['l1']);
if (! (tests agressifs pour voir si ce paramètre est admis)) {
$l1 = '';
}
}

if ($l1 === '') {
include("menuaccueil.php");
} else {
include("$l1.php");
}

Mais le conseil de Kevin comme quoi tu (Julien) dois plutôt calculer les
noms de fichiers toi-même est excellent. À suivre.




Avatar
Olivier Miakinen

autrement pour toi Olivier lorsue tu me dis de calculer les noms de fichiers
?? c à dire ?


Je ne disais rien de plus que l'article de Kevin :

] la methode la plus efficace consiste encore a faire des liens du style
]
] http://tonsite/element.php?q=0
] http://tonsite/element.php?q=1
] http://tonsite/element.php?q=2
] ...
]
] et de faire un tableau dans element.php qui liste les elements que tu
] veux reelement include...

mettre toutes les pages autorisé dans un tableau array ??


Oui. Ou bien tu peux faire un switch :

switch ($q) {
case 1 :
include('page1.php');
break;
case 2 :
...
default :
include('pagepardefaut.php');
break;
}