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

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
<< 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