Aide - Recherche - Membres - Calendrier
Version complète : Faille dans les include() php
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
Thefanatics
Bonjour j'aimerais connaitres comment remédier aux failles de la fonction include, car moi je les codes de cette manière :

PHP

<?php include 'page.php'; ?>



De plus, dans une de mes parties, j'ai une page, si j'ai :

PHP

if ($_GET['test'] = "file")
{
include 'test.txt' ;
}
?>


Comment sécuriser ceci ?

Merci d'avance
t-servi
Salut,
Quelques idées :
1) mettre le fichier en lecture seule, si tu ne dois pas écrire dedans
2) ne pas donner les droits d'écriture au groupe "other"
3) empêcher l'accés au fichier dans le htaccess
Meilleures salutations.
Jean Tinguely Awais.
MarvinLeRouge
Salut,

A mon avis, un des éléments clés pour éviter les problèmes : vérifier que les valeurs fournies appartiennent à un ensemble prédéfini.
Exemple :pour un include de page php, tu as un tableau contenant les noms des fichiers qui peuvent normalement apparaître là, et toute autre valeur est rejetée.
Antoine
Citation (Thefanatics @ Aug 8 2008, 06:58 PM) *
Bonjour j'aimerais connaitres comment remédier aux failles de la fonction include, car moi je les codes de cette manière :

PHP

<?php include 'page.php'; ?>

De plus, dans une de mes parties, j'ai une page, si j'ai :

PHP

if ($_GET['test'] = "file")
{
include 'test.txt' ;
}
?>


Comment sécuriser ceci ?

Il ne peut y avoir de faille là dedans, sauf si le fichier .txt contient du code php. Au quel cas, il est possible de le lire en écrivant l'adresse du fichier.

Les failles par include sont présentes lorsque le code est structuré de la manière suivante:

PHP


<?php
include($_GET['mapage'].'.php');
?>

Je peux alors directement choisir la page à inclure en modifiant l'url. Ici, tu vérifie la valeur avant d'inclure la page, pas de soucis donc.
br3j
salut

alors là, attention!!! include et get == danger absolu, pas d'à peu près possible...

pour commencer, privilégier toujours include_once()

ensuite, une fonction dans une classe

const INCLUDE_IMP = "Fichier introuvable.Impossible de poursuivre.";

function insert($insertion) {
if (file_exists($insertion)) {
$url = $insertion;
}
else {
throw new Exception(self::INCLUDE_IMP);
}
//efface le cache php de file_exists
clearstatcache();
return $url;
}

on l'utilise comme çà

try {
//$scanne_f est une instance de la classe
$url = $scanne_f->insert('includes/menu.php');
include_once($url);
}
catch (Exception $e) {
echo $e->getMessage();
}

dans le dossier includes on place un htaccess par sécurité

une autre solution est de faire un tableau php contenant les fichiers à inclure et de verifier si la variable get est présente dans le tableau sinon die(), on quitte ou insére un fichier par défaut.

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

et

if (in_array($_GET['a_inclure'],$tab_inc)) {
on inclu
} else {
die('corruption de la variable');
ou include par défaut
}


toujours utiliser

if (!empty($_GET('ma_var')) avant traitement avec trim(htmlentities($_GET['ma_var']))

et surtout ne pas hésiter à consulter le manuel php en ligne, il est vraiment top et à jour.

bon code == compréhension wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.