Protection de mon hyper-lien

max1_
Invité n'ayant pas de compte PHPfrance

14 avr. 2006, 18:41

Bonjour a tous :D

Voila j'ai fait un petit code en php pour appelez des pages dans un autre dossier, mais je crois et j'en suis sur que mon code n'est pas sécuriser !

Pouvez voir s'il y a bien une faille ?

"><? 
/*if (!isset($_GET['page'])) {
include("accueil.php");
} else {
include($_GET['page'].".php");
}*/

if (isset($_GET['page'])) {
include ("navig/".$_GET['nav']."/".$_GET['page'].".php") ;
} elseif (isset($_GET['nav'])) {
include ("navig/".$_GET['nav']."/index.php") ;
} else {
include ("accueil.php") ;
}
?>
Merci de votre aide :wink:

Mammouth du PHP | 768 Messages

14 avr. 2006, 18:50

<?php
if ( (isset($_GET['nav'])) && (isset($_GET['page'])) ){
   include ("navig/".$_GET['nav']."/".$_GET['page'].".php") ;
} 
elseif ( (isset($_GET['nav'])) && (!isset($_GET['page'])) ){
   include ("navig/".$_GET['nav']."/index.php") ;
} 
else 
{
   include ("accueil.php") ;
}
?>
<?php est préférable à <? en début de code
pour plus de sécurité, tu peux vérifier si la page existe avec la fonction file_exists()
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

max1
Invité n'ayant pas de compte PHPfrance

14 avr. 2006, 19:19

Bonsoir Mario et merci pour ta réponse aussi rapide :wink:
Vais regarder pour la fonction file_exists() et aussi m'enregistrer sur le forum car en invité ça le fait pas :oops:

Eléphanteau du PHP | 17 Messages

14 avr. 2006, 19:46

Hum après vérification j'ai toujours des failles comme par exemple :
index.php?nav=%3Cb%3E 
ou
index.php?nav=../ 
La on peu acceder :cry:

merci de votre aide :!:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

14 avr. 2006, 23:44

Il faut simplement que tu n'utilises pas ce qu'entre l'utilisateur pour construire le chemin du fichier. À la place, essaie quelque chose comme:
<?php

$pages = array(
   'index'  => 'index.php',
   'chat'   => 'chat.php',
   'secret' => 'secret/index.php'
);

if (isset($_GET['page'], $pages[$_GET['page']))
{
   $fichier = $pages[$_GET['page']];
}
else
{
   $fichier = 'accueil.php';
}

include('./' . $fichier);

?>

Eléphanteau du PHP | 17 Messages

15 avr. 2006, 10:18

Bonjour Hubert Roksor :wink: et merci !

Hum j'ai un petit problème a la fin du
if (isset($_GET['page'], $pages[$_GET['page'])) 
syntax error, unexpected ')', expecting ']'

Mammouth du PHP | 768 Messages

15 avr. 2006, 10:37

petite correction du code + ajout d'un contrôle d'index pour le tableau

<?php 

$pages = array( 
   'index'  => 'index.php', 
   'chat'   => 'chat.php', 
   'secret' => 'secret/index.php' 
); 

if ( (isset($_GET['page'])) && (array_key_exists($_GET['page'], $pages)) ) 
{ 
   $fichier = $pages[$_GET['page']]; 
} 
else 
{ 
   $fichier = 'accueil.php'; 
} 

include('./' . $fichier); 

?> 
:?: http://fr.php.net/manual/fr/function.ar ... exists.php
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphanteau du PHP | 17 Messages

15 avr. 2006, 12:17

Ok merci beaucoup a tout les deux :wink: et vive PhpFrance :D

TiEuAM
Invité n'ayant pas de compte PHPfrance

12 juil. 2006, 16:18

$pages = array(
'index' => 'index.php',
'chat' => 'chat.php',
'secret' => 'secret/index.php'
);

Mais comment faire pour que les element de l'array soit dynamique, crée a partir d'une BDD par exemple.

Merci

LKL
Invité n'ayant pas de compte PHPfrance

20 juil. 2006, 16:20

Je débarque un peu, mais ça ne serait pas plus facile / efficace d'utiliser un switch - case en php ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 juil. 2006, 20:50

$pages = array(
'index' => 'index.php',
'chat' => 'chat.php',
'secret' => 'secret/index.php'
);

Mais comment faire pour que les element de l'array soit dynamique, crée a partir d'une BDD par exemple.

Merci
Suffit de boucler sur le résultat de la requête et de récupérer une valeur pour l'index (champ index) et une pour le chemin (champ chemin):
$pages = array();
boucle($data=...)
{
      $pages[$data['index']]=$data['chemin'];
}
Je débarque un peu, mais ça ne serait pas plus facile / efficace d'utiliser un switch - case en php ?
Chacun sa manière de faire le tableau évite de tout étaler sur 200 lignes on retrouve beaucoup plus facilement les pages de redirection possibles.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 353 Messages

20 juil. 2006, 22:07

if ( (isset($_GET['page'])) && (array_key_exists($_GET['page'], $pages)) ) 
{ 
ou en beaucoup lus imple:
if ( (isset($_GET['page'])) && isset($pages[$_GET['page']]))
{ 

TiEuAM
Invité n'ayant pas de compte PHPfrance

26 sept. 2006, 18:04

Je n'était pas repassé par là, et j'ai retrouver mon petit fichier texte avec l'adresse de cette page par hazard, et je vous dit un grand merci pour cette réponse.

Je n'est tjrs pas fait mon systeme pour la création de page entiere sur ma plate-forme, et j'allai justement m'y attardé, encore merci...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 sept. 2006, 19:46

Je n'était pas repassé par là, et j'ai retrouver mon petit fichier texte avec l'adresse de cette page par hazard
Et les favoris alors :wink:
Et sinon l'inscription qui ne coute rien et tu serais averti par mail lors d'une réponse.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute