soucis avec la securisation d'include avec variable

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : soucis avec la securisation d'include avec variable

Re: soucis avec la securisation d'include avec variable

par macplus » 21 mai 2013, 15:33

hello!
oui, pas faux en même temps...

Mais bon, d'un autre coté, j'aimerais aussi comprendre pourquoi ça ne réponds pas dans le cadre des condtions que je lui fixe :idea:

Re: soucis avec la securisation d'include avec variable

par ghost5922 » 16 mai 2013, 16:56

Re,

redirige et ne fais pas un include :)

Re: soucis avec la securisation d'include avec variable

par macplus » 16 mai 2013, 16:50

Re-
Bon alors, j'ai résolu 33.33% de mon souci !
la vérif des includes sur la vairable $dossier se fait nickel en positif comme en négatif.
Le code:
connexion à la bdd
{
		$dossiertemp = $_GET['page'];
		$debutdossiertemp = stripos($dossiertemp, 'photos/') + 7; //7 -> nombre de caractère du masque de recherche
		$findossiertemp = stripos($dossiertemp, '/index.php');
		$dossiertemp = substr ($dossiertemp, $debutdossiertemp, $findossiertemp-$debutdossiertemp);
	$lire=mysql_query("SELECT nomfolder FROM photos WHERE nomfolder = '$dossiertemp' "); 
 } 
	 while ($row = mysql_fetch_assoc($lire))
	 {
	 $dossier = $row['nomfolder'] ;
 	 }  
puis inclusion dans le array de $pageok:
$pageOK = array('cette_semaine.php' => 'cette_semaine.php',
	    "includes/photos/".$dossier."/index.php" => "includes/photos/".$dossier."/index.php",[...]
Là je m'attaque à mes url du type

accueil.php?page=includes/archives.php&star=Kesha


donc je suis parti du même principe:
 {
		$startemp = $_GET['page'];
		$startemp = substr ($startemp, 26);
	 $lire2=mysql_query("SELECT star FROM newsstars WHERE star = '$startemp' ");
	 echo $lire2;
	 }
	 while ($row2 = mysql_fetch_assoc($lire2))
	 {
	 $star2 = $row2['star'];
	 }
puis dans le array de la vérif:
"includes/archives.php&star=".$star2 => "includes/archives.php&star=".$star2 ,
quand $startemp existe dans la bdd, il affiche bien le contenu, mais quand il n'existe pas dans la bdd, il affiche la page sans le contenu au lieu de renvoyer vers la page d'accueil comme c'est prévu après le array:
if ((isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
        include($pageOK[$_GET['page']]);
        }else {
        include('cette_semaine.php'); 
        }
Est ce une erreur d'innatention ou un problème plus global?

Merci à toi

Re: soucis avec la securisation d'include avec variable

par ghost5922 » 16 mai 2013, 16:00

Oui ou tu peux faire une chaine au lieu du tableau

<?php
$dossier='';

//dans la boucle
$dossier.= '/'.$row['nomfolder'].'/|';//on prepart la regex



//pour verifier
if(!empty($dossier)){$dossier = substr($dossier, 0, -1);}
if(!preg_grep ('#'.$rep.'#', $_GET['page'])){
echo'redirection';
}
else{
//page
}
?>
a améliorer :p et pas tester

Re: soucis avec la securisation d'include avec variable

par macplus » 16 mai 2013, 15:36

oui, je commence à mieux comprendre les 2 solutions.
Mais dans tous les cas si j'ai tout compris, je dois extraire
$_GET['page'] et le traiter pour isoler le nom du dossier dans une variable que j'enverrais soit dans ma requete (effectivement je pense le plus simple), soit dans mon tableau

Je vais essayer je te reviens donner ce que j'obtiens

Merci à toi en quelques heures tu m'ai fait comprendre ce que je n'arrivais pas à comprendre depuis des mois... =D>

Re: soucis avec la securisation d'include avec variable

par ghost5922 » 16 mai 2013, 15:28

Re,

donc le répertoire superbus est bien present en bdd du coup ma question plutôt fonctionne

pour cette solution une simple requete avec en argument le répertoire

sinon il suffi de mettre tous les dossiers dans un table(array) puis de vérifie si cette valeur et pressent de dans

pour ici stocker $dossier[]

$dossier[] = $row['nomfolder'] ;

if (in_array("superbus", $dossier)) {

}

http://php.net/manual/fr/function.in-array.php

Re: soucis avec la securisation d'include avec variable

par macplus » 16 mai 2013, 15:22

oui, je vais essayer ça pour voir si ça repond à mon besoin.

mon but etant de mettre toutes les valeurs de $dossier dans ma boucle pour qu'il compare avec la valeur de $dossier dans l'url affichée et donc qu'il puisse définir si l'url est valide (et donc afficher la page) ou si l'url ne correspond à rien d'existant sur mon site et donc renvoyer vers la page d'accueil.

exemple
monsite.com/accueil.php?page=includes/photos/superbus/index.php : superbus correspond bien au nom d'un dossier stocké en bdd donc la page s'affiche
mnosite.com/accueil.php?page=includes/photos/superhacking/index.php : superhacking ne correspond pas au nom d'un dossier stocké en bdd donc la page affichée sera la page accueil.php?page=cettesemaine.php

Pour les pages physiquement présentes dans mon site, j'ai rentré les url en dur dans l'array de $pageok, mais j'ai beaucoup plus de mal pour les url contenant des variables issues de ma bdd

Re: soucis avec la securisation d'include avec variable

par ghost5922 » 16 mai 2013, 14:58

Désolé c'est pas $_GET['include'] mais $_GET['page']

si tu veux que $dossiers contient tous les infosmations dans un array il suffi de mettre
$dossier[] = $row['nomfolder'] ;
si tu fais un print_r($dossier);

tu aura toutes les infos sinon

tu veux pouvoir lister tous les dossiers pour les liers avec quel infos ?

Re: soucis avec la securisation d'include avec variable

par macplus » 16 mai 2013, 14:17

oui, sauf que je ne stocke , par exemple dans le cas des photos, que le nom du dossier (et d'autres donnéees de contenu) dans la bdd.

C'est pour ça que mon but etait renvoyer dans le array de $pageok toutes les valeurs de ma variable $dossier, mis en forme dans l'url complète.

ou alors il faut que je récupère l'url appelée, que j'en extraie le nom du dossier pour le renvoyer en variable dans ma requete mysql

par contre je ne comprends pas ou tu prends le $_GET['include'] ?

merci

Re: soucis avec la securisation d'include avec variable

par ghost5922 » 16 mai 2013, 11:46

BOnjour,

pourquoi ne pas faire une requête avec ta variable ?

where page='mapage.php' and `include`='".$_GET['include']."'

si tu as un résultat c'est que tu peu sinon non ou j'ai mal compris :)

Re: soucis avec la securisation d'include avec variable

par macplus » 16 mai 2013, 11:41

Et bien en fait, ce que je cherche à faire, c'est que quand j'affiche une url dans mon navigateur
Par exemple

accueil.php?page=includes/photos/nomfolder/index.php

le script vérifie l'existence du nom du dossier dans la base de données et si le nom est existant, il inclus et affiche le fichier, sinon, il inclus le fichier par défaut (de la page d'accueil)
comme il le fait pour les urls physiques.

je pensais que comme ma variable est dans la boucle while, le script compare la variable avec toutes les valeurs présentes dans la bdd, mais effectivement, il ne compare qu'avec la dernier valeur de la bdd :cry:

Re: soucis avec la securisation d'include avec variable

par ghost5922 » 15 mai 2013, 17:28

Re,

j'ai mi deja les premiers erreur dit moi se que tu souhaite optenir un array avec tous les fichiers répertoires de ta bdd ?

exemple la table nomfolder

contien tous les nom des rep tu veux en faire koi ?
<?php
{

        $lire=mysql_query("SELECT nomfolder FROM photos "); 
 } 
         while ($row = mysql_fetch_assoc($lire))
         {
         $dossier = $row['nomfolder'] ;//ici tu as un souci tu garde que le dernier $row['nomfolder']
         }  

         {
         $lire2=mysql_query("SELECT star FROM newsstars ");
         }
         while ($row2 = mysql_fetch_assoc($lire2))
         {
         $star2 = $row2['star'];// ici pareil tu ne garde que le dernier $row2['star']
         }
         
         {
         $lire3=mysql_query("SELECT urlml FROM musicline ");
         }
         while ($row3 = mysql_fetch_assoc($lire3))
         {
         $url = $row3['urlml'];// ici pareil tu ne garde que le dernier $row3['urlml']
         }
         
$pageOK = array('cette_semaine.php' => 'cette_semaine.php',
            "includes/photos/".$dossier."/index.php" => "includes/photos/".$dossier."/index.php",        
                'includes/musicline.php' => 'includes/musicline.php',   
                "url" => $url ,
                'includes/musiclineart.php' => 'includes/musiclineart.php',     
                'includes/infoemploi.php' => 'includes/infoemploi.php', 
                'includes/iemploiart.php' => 'includes/iemploiart.php', 

                "star" => $star2 ,
                'includes/archives.php' => 'includes/archives.php',
                

        'includes/newspeople.php' => 'includes/newspeople.php',
        'includes/concerts.php' => 'includes/concerts.php',

        'includes/genhits.php' => 'includes/genhits.php',
        'includes/info.php' => 'includes/info.php',
        'includes/coco.php' => 'includes/coco.php',
 
        );
                
                
        if ((isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
        include($pageOK[$_GET['page']]);
        }else {
        include('cette_semaine.php'); 
        }
        ?>

Re: soucis avec la securisation d'include avec variable

par macplus » 15 mai 2013, 16:37

{
	$lire=mysql_query("SELECT nomfolder FROM photos "); 
 } 
	 while ($row = mysql_fetch_assoc($lire))
	 {
	 $dossier = $row['nomfolder'] ;
 	 }  

	 {
	 $lire2=mysql_query("SELECT star FROM newsstars ");
	 }
	 while ($row2 = mysql_fetch_assoc($lire2))
	 {
	 $star2 = $row2['star'];
	 }
	 
	 {
	 $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",	 
		'includes/musicline.php' => 'includes/musicline.php',	
		"url" => $url ,
		'includes/musiclineart.php' => 'includes/musiclineart.php',	
		'includes/infoemploi.php' => 'includes/infoemploi.php',	
		'includes/iemploiart.php' => 'includes/iemploiart.php',	

		"star" => $star2 ,
		'includes/archives.php' => 'includes/archives.php',
		

        'includes/newspeople.php' => 'includes/newspeople.php',
        'includes/concerts.php' => 'includes/concerts.php',

        'includes/genhits.php' => 'includes/genhits.php',
        'includes/info.php' => 'includes/info.php',
        'includes/coco.php' => 'includes/coco.php',
 
        );
		
		
        if ((isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
        include($pageOK[$_GET['page']]);
        }else {
        include('cette_semaine.php'); 
        }
merci à toi

Re: soucis avec la securisation d'include avec variable

par ghost5922 » 15 mai 2013, 15:24

Re,

peux tu poste ton dernier code que je puise voir

Re: soucis avec la securisation d'include avec variable

par macplus » 15 mai 2013, 15:20

Bonjour ghost5922,
oui.
En fait je sécurise mes includes en vérifiant que l'url appelée est bien dans la liste des url autorisées.

J'ai 3 type d'urls:
-url +1 variable : du type accueil.php?page=includes/page.php
-url + 2 variables : du type accueil.php?page=includes/page.php&var1=donnée1
-url + 1 variable : du type accueil.php?page=includes/photos/var2/index.php

pour le premier type, pas de soucis, ce sont des noms de fichiers physiques et la vérification se fait correctement.

Mon souci est sur les 2 autres types ou les variables sont issues d'une base mysql.
La connexion mysql est ok, mais soit la vérif ne se fait pas (du coup la page n'est pas consultable) soit la vérif se fait seulement sur la dernière ligne de ma table mysql et du coup seule la dernière page créée est consultable mais pas les précédentes.

Merci pour ton aide si tu peux.
cordialement