| Auteur |
Message |
zorteil
Citoyen BBtoMax

Inscrit le: Sep 11, 2006
Messages: 6
Localisation: fr
|
Posté le:
Lun Sep 11, 2006 9:32 pm |
|
bonjour à tous. mes débuts sur ce site.
je regardais le tuto sur l'intégration de mod phpBB dans BBtomax avec des remplacements à faire du genre:
if (file_exists('path/nom_fich.php')) include_once('path/nom_ficch.php');
je ne sais pas comment s'est faite l'intégration de BBtoMax dans maximus; par contre en travaillant sur le fichier mainfile.php j'ai découvert une particularité de la fonction include() qui semble méconnue et qui est potentiellement dangereuse.
include() cherche le fichier là où on lui dit qu'il est et si elle ne le trouve pas
1) elle n'interrompt pas l'exécution du script, ce qui peut être génant, voir dangereux car il peut se passer des choses incontrôlables
2) pire, recherche le fichier à la racine du site et l'inclue si elle le trouve.
hors pagestart.php de phpBB pour maximus (ou startpage je ne sais plus trop) gère mal les chemins d'accès à mainfile.php et config.php.
Il en résulte que ne trouvant pas mainfile.php là ou il devrait être, include remonte à la racine du répertoire, y trouve mainfile.php et l'inclue.
donc si un attaquant réussit à placer là où include le cherche un fichier mainfile.php c'est un terrible désastre de plus invisible. voir mes posts "jeu hilarant" sur le site officiel de maximus.
soit remplacer include() par require() qui arrêterait l'exécution du script en cas d'erreur de path (à voir, on le lit partout mai j'ai des doutes au vu des tests que j'ai faits)
soit et ça me paraît préférable on complète le if(file_exists) avec un else die("message d'erreur"); si le fichier est indispensable
mais comme certains fichiers peuvent être manquants (des fichiers custom ou de cron) la meilleure des sécurités est de bien vérifier le path quand on utilise include ou require. pour ma part pendant la phase de développement j'utilise systématiquement le else die("message d'erreur") pour tous les includes sans exception et je pousse le vice jusqu'à rentrer un nom de fichier faux pour tester que le else s'exécute bien. ensuite enlever les else qui sont inutiles.
je suis de plus en plus convaincu qu'hormis des fichiers d'entrée de site comme index.php admin.php qui peuvent inclure en remontant des répertoires, tous les autres fichiers étant eux même inclus ne devraient inclure que des fichiers de même niveau ou de répertoires enfants.
et si on veut assurer la portabilité et se mettre à l'abri des erreurs de path qu'on a oublié de corriger après une modif
utiliser le code:| Code: |
$the_include = dirname(__FILE__);
file_exists("".$the_include.'/mysql.php') OR die('fichier introuvable : mysql.php ');
include("".$the_include."/mysql.php"); |
tant pis si c'est plus coûteux en ressource serveur. |
|
|
|
 |
epsylon
Team BBtoMax
Team Maximus Canada

Inscrit le:
Messages: 399
Localisation: fr
|
Posté le:
Mar Sep 12, 2006 3:40 pm |
|
|
|
 |
zorteil
Citoyen BBtoMax

Inscrit le: Sep 11, 2006
Messages: 6
Localisation: fr
|
Posté le:
Jeu Sep 14, 2006 10:29 am |
|
bonjour Epsylon
(en attendant un plus familier salut epsy)
oui ça me plairait de faire des tutos sur ce genre d "philosophie"
c'es vrai que sur les sites spécialisés on trouve tout sur la syntaxe des fonctions mais aucun recul, donc on n'attire pas l'attention sur "les bonnes pratiques".
mais tu sais qu'en ce moment j'ai un gros boulot avec le nettoyage du code de maximus BS, après je voudrais bien bosser sur les champs personalisés dans Your_Account
après pourquoi des tutos . |
|
|
|
 |
epsylon
Team BBtoMax
Team Maximus Canada

Inscrit le:
Messages: 399
Localisation: fr
|
Posté le:
Jeu Sep 14, 2006 10:40 am |
|
|
|
 |
zorteil
Citoyen BBtoMax

Inscrit le: Sep 11, 2006
Messages: 6
Localisation: fr
|
Posté le:
Jeu Sep 14, 2006 12:24 pm |
|
bon là je sens les bonnes odeurs de la cuisine que je vais faire.
ciao et bon appêtit |
|
|
|
 |
|
|
|
|