Journal du Net > Développeurs > Contributions > Soumettez votre meilleure astuce PHP
is_in_base_dir

 is_in_base_dir  

Laurent Dinclaux , Païta - Nouvelle-Calédonie le 14 mars 2007

Quel est en 3 lignes l'objectif de votre astuce ?

Mieux sécuriser l'inclusion de fichier lorsqu'un chemin peut ne pas être sûr.

Décrivez votre astuce en détail. N'hésitez-pas à inclure des portions de codes.

Il arrive souvent que l'ont veuille recevoir des chemins ou un nom de fichier par POST ou GET.
Comme vous le savez surement déjà il est fortement déconseillé de faire un "include($_POST['path']);" ou un "echo file_get_contents($_POST['path']);"

En effet ce 'path' peut être bidouillé par un internaute en quelque chose du genre: '../../../etc/passwd' ce qui provoque un réel problème de sécurité...

Pour pallier a cela, j'ai créé une petite fonction qui permet de vérifier que le fichier à inclure est bien dans un chemin définit:

function is_in_base_dir($filePath, $baseDir) {

$_filePath = realpath($filePath);
if(!$_filePath) throw new Exception('Le fichier ' . $filePath . ' n'existe pas. ');

if( strpos($_filePath, $baseDir) === 0 ) return true;
else return false;

}

L'utilisation est simple:

if( is_in_base_dir($_POST['path'], '/var/www/monsite/include') ) {
include($_POST['path']);
}

Vous serez dans ce cas certain que le chemin reçu en $_POST pointe effectivement vers un fichier situé dans /var/www/monsite/include ou vers ses sous-répertoire.

Cela peut aussi être aussi utile pour le redimenssionnement d'images à la volée avec GD ou le chemin vers l'image est transmis à un script ex: resize.php?i=photos/test.jpg.

 
 

Les dernières contributions

 

 

En ce moment sur Journal du Net Développeur

 
16 contributions : 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16
 
Autour du même sujet

Soumettez votre meilleure astuce Oracle Database ? - appel à temoin

Soumettez votre meilleure astuce pour référencer des vidéos - appel à temoin

Soumettez votre meilleure astuce C# - appel à temoin

Soumettez votre meilleure astuce DHTML - appel à temoin

Soumettez votre meilleure astuce SPIP - appel à temoin

Soumettez votre meilleure astuce Flex/MXML - appel à temoin

Soumettez votre meilleure astuce Ruby on Rails - appel à temoin

Soumettez votre meilleure astuce pour assurer l'accessibilité d'un site Web - appel à temoin

Soumettez votre meilleure astuce HTML - appel à temoin

Soumettez votre meilleure astuce SQL - appel à temoin

Magazine Développeurs Envoyer Imprimer Haut de page




A VOIR EGALEMENT