soucis avec la securisation d'include avec variable

Eléphanteau du PHP | 44 Messages

07 févr. 2013, 16:45

Bonjour,
Je vous explique mon souci:
Je sécurise l'include de mes pages de contenu avec le code habituel:
[connexion]
{
	$lire=mysql_query("SELECT nomfolder FROM photos "); 
 } 
	 while ($row = mysql_fetch_assoc($lire))
	 {
	 $dossier = $row['nomfolder'] ;
 	 }  

$pageOK = array('cette_semaine.php' => 'cette_semaine.php',
	    "includes/photos/".$dossier."/index.php" => "includes/photos/".$dossier."/index.php",	 
		'includes/page1.php' => 'includes/page1.php',	
		'includes/page2.php' => 'includes/page2.php',	
		'includes/page3.php' => 'includes/page3.php',
[...]	
	
Pour les pages dont l'url est écrite en dur, pas de souci, mais concernant l'url avec le dossier en variable, il ne valide que la valeur "nomfolder" de la derniere ligne de ma table mysql.
Je n'arrive pas à valider les url où "nomfolder" 'est une autre ligne de ma table.

Si vous pouviez m'aider?

Merci à vous

Eléphant du PHP | 343 Messages

07 févr. 2013, 17:46

Logique, si tu ne traites rien dans le while, tu ne récupères que la dernière valeur.
Mets ton traitement dans le while ;)
Développeur web

Eléphanteau du PHP | 44 Messages

08 févr. 2013, 10:49

Hello!
Merci de ton aide.

tu veux dire que je dois traiter mon array dans ma boucle while?

Mais ça risque de coincer avec mes valeurs fixes dans l'array?
Ou alors je ne comprends pas?
Merci

ViPHP
xTG
ViPHP | 7331 Messages

08 févr. 2013, 12:35

Tu dois générer la partie relative à $dossier dynamiquement.
A savoir dans ta boucle remplir ton array :
$pageOK["includes/photos/".$dossier."/index.php"] = "includes/photos/".$dossier."/index.php";

Eléphanteau du PHP | 44 Messages

08 févr. 2013, 12:58

D'accord, mais alors, comment je l'integre à mon array général?
Puisque pageOK a déjà un array...
Je suis désolé, je crois que je suis complètement largué, là...
D'autant que j'ai le même type de boucle pour un appel cette fois non pas d'un dossier mais d'une page et ça fonctionne...

{
	$lire=mysql_query("SELECT nomfolder FROM photos "); 
 } 
	 while ($row = mysql_fetch_assoc($lire))
	 {
	 $dossier = $row['nomfolder'] ;
                $pageOK["includes/photos/".$dossier."/index.php"] = "includes/photos/".$dossier."/index.php";
 	 }  
	 {
	 $lire3=mysql_query("SELECT urlml FROM musicline ");
	 }
	 while ($row3 = mysql_fetch_assoc($lire3))
	 {
	 $url = $row3['urlml'];
	 }
	 
$pageOK = array('cette_semaine.php' => 'cette_semaine.php',
	    "includes/photos/".$dossier."/index.php" => "includes/photos/".$dossier."/index.php",	 
			"url" => $url ,

ViPHP
xTG
ViPHP | 7331 Messages

08 févr. 2013, 14:00

Laisses moi en douter. ;)

Déclares ton array $pageOK avant ta boucle, et affiches le après la boucle (print_r ou var_dump) avec ce que je t'ai proposé.
Tu vas vite comprendre.

Eléphanteau du PHP | 44 Messages

08 févr. 2013, 15:14

effectivement, ça ne protège rien du tout ...
j'ai essayé d'avancer sur ta piste:
{
	$lire=mysql_query("SELECT nomfolder FROM photos "); 
 } 
	 while ($row = mysql_fetch_assoc($lire))
	 {
	 $dossier = $row['nomfolder'] ;
$pageOK["includes/photos/".$dossier."/index.php"] = "includes/photos/".$dossier."/index.php";
        if ((isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
        echo "result : " .$pageOK[$_GET['page']]. "<br/>";
        }else {
        echo 'cette_semaine.php <br/>'; 
        } 
  	 } 		
		var_dump($pageOK);
J'obtiens alors ce résultat:
la numerotation des dossier correspond à leur ordre dans ma table (5dossiers donc 5 lignes):
Si dossier1:

Code : Tout sélectionner

result : includes/photos/dossier1/index.php result : includes/photos/dossier1/index.php result : includes/photos/dossier1/index.php result : includes/photos/dossier1/index.php result : includes/photos/dossier1/index.php
si dossier2:

Code : Tout sélectionner

cette_semaine.php result : includes/photos/dossier2/index.php result : includes/photos/dossier2/index.php result : includes/photos/dossier2/index.php result : includes/photos/dossier2/index.php
si dossier3:

Code : Tout sélectionner

cette_semaine.php cette_semaine.php result : includes/photos/dossier3/index.php result : includes/photos/dossier3/index.php result : includes/photos/dossier3/index.php
si dossier4:

Code : Tout sélectionner

cette_semaine.php cette_semaine.php cette_semaine.php result : includes/photos/dossier4/index.php result : includes/photos/dossier4/index.php
si dossier 5:

Code : Tout sélectionner

cette_semaine.php cette_semaine.php cette_semaine.php cette_semaine.php result : includes/photos/dossier5/index.php

Je ne sais pas comment comprendre ce résultat?
Je m'attendais effectivement plutot à retrouverle résultat escmopté à savoir juste result: includes/photos/dossiern/index.php

Par ailleurs, une fois cela résolu, je ne vois pas comment je vais pouvoir integrer mon array dans plusieurs boucles en mele temps...ou alors, il faut que je refasse ma condition autant de fois que j'ai de boucles?

Merci

Eléphanteau du PHP | 44 Messages

08 févr. 2013, 15:16

je n'ai pas afficher le résultat du var_dump qui lui est correct et me rend mon array avec mes 5 dossiers...

ViPHP
xTG
ViPHP | 7331 Messages

08 févr. 2013, 18:03

Ton if dans la boucle est à paramètre fixe, à chaque itération de la boucle il affiche donc la même chose. :)
Ton affichage résultant est donc tout à fait normal.
Consultes le var_dump(), s'il affiche ce que tu veux c'est que le while effectue la bonne chose.

Quand à ton if si c'est celui pour l'inclusion il faut le déplacer en dehors de la boucle.

Eléphanteau du PHP | 44 Messages

11 févr. 2013, 17:46

Hello!
Ca y est , ça fonctionne...

Par contre, j'ai 2 autres variables à tester depuis une table...
J'ai essayé en faisant un test distinct pour chaque mais il aime pas et ne vérifie que la dernière variable en test.

Je pourrait faire une seule requete select avec une jointure conditionnelle, mais c'est au niveau de la gestion dans la boucle while que je ne vois pas du tout comment lui faire valider l'ensemble des variable selon que l'une ou l'autre se trouve dans le get...
#-o
$pageOK = array('cette_semaine.php' => 'cette_semaine.php',	 
	 		'includes/page1.php' => 'includes/page1.php',
		'includes/page2.php' => 'includes/page2.php',	
		'includes/page3.php' => 'includes/page3.php',	
		'includes/archives.php' => 'includes/archives.php',	
		);
			include("../connexion.php"); 
mysql_connect($host, $user, $pass); 
mysql_select_db("$bdd") 
or die("Ouverture base impossible");

{
	$lire=mysql_query("SELECT p.nomfolder,n.star,m.urlml FROM photos as p,newsstars as n,mslin as m "); 
 } 
	 while ($row = mysql_fetch_assoc($lire))
	 {
	 $dossier = $row['nomfolder'] ;
                 $star2 = $row['star'];
                 $url = $row['urlml'],
$pageOK["includes/photos/".$dossier."/index.php"] = "includes/photos/".$dossier."/index.php";[color=#FF0000]?ici comment tout intégrer pour la validation?[/color]
        

  	 } 	

	 
	 
	if ((isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
        echo "result photos : " .$pageOK[$_GET['page']]. "<br/>";
        }else {
        echo 'cette_semaine.php <br/>'; 
        } 	
		var_dump($pageOK);

Eléphanteau du PHP | 44 Messages

18 févr. 2013, 14:47

Hello!
J'essaie d'avancer mais je ne m'en sors pas trop...
Je récapitule ce que j'essaie de faire dans ma protection d'includes:
-pages statiques
-pages dynamiques venant de 3 tables différentes à 1 ou 2 variables

Maintenant, je me suis dit, mais visiblement à tort, que je pouvais traiter mes différents cas de figure séparéments puis de faire une condition générale :
$pageOK = array('cette_semaine.php' => 'cette_semaine.php',	 
	 		'includes/page1.php' => 'includes/page1.php',
			'includes/page2.php' => 'includes/page2.php',
		'includes/page3.php' => 'includes/page3.php',	
		'includes/page4.php' => 'includes/page4.php',	
		'includes/archives.php' => 'includes/archives.php',
		'includes/musiclineart.php' => 'includes/musiclineart.php',
		);
		
			include("./connexion.php"); 
mysql_connect($host, $user, $pass); 
mysql_select_db("$bdd") 
or die("Ouverture base impossible");

	 {
	 $lire2=mysql_query("SELECT star FROM stars ");
	 }
	 while ($row2 = mysql_fetch_assoc($lire2))
	 {
	 $star2 = $row2['star'];
	 $pageOK2["star"] = $star2 ;//url en accueil.php?page=includes/archives.php&star=Adele
	
	 }
	 
	 {
	 $lire3=mysql_query("SELECT urlml FROM mc ");
	 }
	 while ($row3 = mysql_fetch_assoc($lire3))
	 {
	 
	 $url = $row3['urlml'];
	 	 $pageOK3["includes/musiclineart.php&=url".$url] = "includes/musiclineart.php&url=".$url ;//url en accueil.php?page=includes/musiclineart.php&url=music-line-date
	 }	 


{
	$lire=mysql_query("SELECT nomfolder FROM photos "); 
 } 
	 while ($row = mysql_fetch_assoc($lire))
	 {
	 $dossier = $row['nomfolder'] ;
$pageOK4["includes/photos/".$dossier."/index.php"] = "includes/photos/".$dossier."/index.php";
        

  	 } 	

	 
	 
	if ((isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) 
		{
        echo "result general : " .$pageOK[$_GET['page']]. "<br/>";
				var_dump($pageOK);
        }
	
	elseif ((isset($_GET['page'])) && (isset($pageOK2[$_GET['page']])) ) 
		{
        echo "result star : " .$pageOK2[$_GET['page']]. "<br/>";
						var_dump($pageOK2);
        }
		
	elseif ((isset($_GET['page'])) && (isset($pageOK3[$_GET['page']])) ) 
		{
        echo "result musicline : " .$pageOK3[$_GET['page']]. "<br/>";
						var_dump($pageOK3);
        }
		
	elseif ((isset($_GET['page'])) && (isset($pageOK4[$_GET['page']])) ) 
		{
        echo "result archives : " .$pageOK4[$_GET['page']]. "<br/>";
						var_dump($pageOK4);
        }
	
	else {
        echo 'result : cette_semaine.php <br/>'; 
        } 
Résultat:
pour page OK =>il me restitue bien ma page et le vardump est complet sur les pages statiques...

PageOK2 =>result general me renvoie la page archives.php sans la 2eme variable (star)
Vardump me renvoie la liste des pages statiques et non l'ensemble des pages à 2 url que j'attendais.

pageOK3 =>result me renvoie à cette_semaine.php et vardump ne me renvoie rien du tout (snif)

pageOK4 =>result me renvoie bien mon url avec la variable dossier ok et vardump me renvoie bien la liste des url avec chaque dossier dynamique correspondant...

Donc si je résume, mon script marche bien pour les pages statiques, pour les pages photos (variable de dossier) mais pas pour les url à 2 variables.

un tit coup de pouce supplémentaire? ce serait gentil.

Merci

Eléphanteau du PHP | 44 Messages

27 févr. 2013, 12:56

Bonjour,
Je ne m'en sors toujours pas avec ce code. :cry:

Je me demande si je ne fereai pas mieux de créer un fichier de vérif par type d'url et d'appeler le fichier concerné en fonction de l'url affichée?

Qu'en pensez vous?

Merci

Eléphanteau du PHP | 44 Messages

06 mai 2013, 12:08

Bonjour,

Je suis complètement à la rue sur ce code, si quelqu'un pouvait m'aider à y voir plus clair et remédier à mon souci, ce serait vraiment gentil. :D

Merci à tous

Eléphanteau du PHP | 44 Messages

13 mai 2013, 10:43

plus personne pour me conseiller?

Merci d'avance :)

Eléphanteau du PHP | 44 Messages

15 mai 2013, 14:49

Bonjour,

Est ce que ma question est trop bête?
ou est ce que j'ai ecrit quelque chose de choquant ?
Je m'étonne juste de ne plus avoir de réponse de puis le mois de février?

Merci à vous