8791 sujets

Développement web côté serveur, CMS

Bonjour, quelle est le meilleur code pour utiliser des pseudo-frames sur son site ?
J'ai lu que l'inclusion de pages indiquées dans le GET pouvait être dangereuse, mais c'est vraiment pratique et j'aimerais continuer à bosser comme ça.

Par contre, j'ai vu des tutos qui créent un array avec toutes les pages "autorisées".
Ca m'emmerde de devoir éditer ça à chaque fois que je rajoute une page, aussi j'aimerais bien savoir s'il existe une méthode plus pratique et sécurisée...

Merci !
Salut,

Personnellement j'utilise une méthode qui me semble pas mal :

1) Je vérifie si le fichier que je veux afficher existe. avec un is_file()

2) Je rajout moi même l'extension des pages, souvent elle ne sont que en php.

Je pense que pour la sécurité c'est suffisant, de plus j'utilise le URL rewritting donc cela cache un peu mieux mes urls.
salut

a écrit :
Ca m'emmerde de devoir éditer ça à chaque fois que je rajoute une page


c'est pourtant la solution la plus intélligente.si les sites les mieux sécurisés utilisent cette technique et que tout les manuels bien fait la recommande, ce n'est pas par hasard Smiley cligne et çà n'à rien de contraignant enfin, à mon sens.couplé à une expression régulière qui vérifie le path, la racine d'inclusion, on code tranquille Smiley smile

<< hallindel

is_file, vérifie que le fichier est bien un fichier et pas un dossier, ce n'est donc pas suffisant d'autant moins que rajouter l'extension manuellement n'à aucune incidence sur la sécurité...file_exists est plus approprié, c'est l'empirisme qui parle...

>>>

placer la racine d'inclusion dans une constante est aussi une bonne chose.se protéger des xss est aussi utile avec strip_tags et/ou htmlentities.


$tab_inc = array('dossier/fichier.php');

if (!empty($_GET['fichier']) {
   $fich_inc = trim(strip_tags(htmlentities($_GET['fichier'])));
   if (in_array($fich_inc, $tab_inc)) {
      include_once($fich_inc);
   } else {
        die(inclusion impossible!);
     }
} else {
     die(pas de valeur valide à traiter!);
   }
}


il existe aussi d'autres possibilités de sécurisation d'une get comme cette fonction utile.


function verif_get($var_verif) {
     strip_tags($var_verif);
     if (preg_match('#^(http|ftp|../)#',$var_verif)) {
        $test = 0;
        return $test;
     }
     // dossier/ est la racine d'inclusion
     elseif (!preg_match('#^(dossier/)#',$var_verif)) {
	$test = 1;
	return $test;
     }
     else {
       $test = 2;
       return $test;
     }
}


on pourrait obtenir le code suivant en mixant les deux


<?php
function verif_get($var_verif) {
     strip_tags($var_verif);
     if (preg_match('#^(http|ftp|../)#',$var_verif)) {
        $test = 0;
        return $test;
     }
     // dossier/ est la racine d'inclusion
     elseif (!preg_match('#^(dossier/)#',$var_verif)) {
	  $test = 1;
	  return $test;
     }
     else {
       $test = 2;
       return $test;
     }
}

function insert($insertion) {
    // dans une classe, la placer en var ou mieux, private si php 5
    $tab_inc = array('dossier/fich_inc.php');
    trim(htmlentities($insertion));
    if (in_array($insertion, $tab_inc)) {
       $url = $insertion;
    }
    else {
       die('insertion impossible!');
    }
    return $url;
}

if (!empty($_GET['fichier']) && verif_get($_GET['fichier']) === 2) {
   $fich = insert($_GET['fichier']);
   include_once($fich);
} else {
     die('insertion impossible, racine invalide!');
  }
?>


évidement balancer le dossier et le fichier dans la valeur du get c'est pas top, à vous d'adapter selon vos variables, c'est un exemple.

le tout dans une classe, çà facilite aussi grandement la gestion.bref! la sécurité d'un script php c'est forcement plus difficile mais une fois en place, on ai tranquille, relativement Smiley fache