Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1550 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Securisation d'un script de listage de fichiers [resolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Securisation d'un script de listage de fichiers [resolu]

n°1373956
davius
Posté le 24-05-2006 à 11:48:12  profilanswer
 

Salut
 
Je suis sur un script permettant de lister les fichiers contenus dans un repertoire.
 
Le fichier, nommé index.php, est situé dans le repertoire a lister et doit egalement permettre de parcourir les sous-repertoires.
 
j'utilise donc une fonction opendir / readdir.
Si le fichier lu est un repertoire, alors l'afficher avec un lien index.php?directory=repertoire
 
l'inconvenient est que si l'utilisateur rentre ?directory=../..  , c'est noel, il parcours mon disque.
 
je voudrais donc securiser ca en verifiant que le path demandé est bien un sous repertoire du script courant.
 
Quelques tests avec $_SERVER["PHP_SELF"] ou realdir n'ont rien donne de concluant...
Je suppose que le probleme est courant, ce genre de script étant répandu.
 
Un peu d'aide svp


Message édité par davius le 24-05-2006 à 12:33:46
mood
Publicité
Posté le 24-05-2006 à 11:48:12  profilanswer
 

n°1373963
anapajari
s/travail/glanding on hfr/gs;
Posté le 24-05-2006 à 11:55:29  profilanswer
 

avant de faire ton opendir vérifie que le répertoire en question est "lisible" [:spamafote]

n°1373973
davius
Posté le 24-05-2006 à 12:00:45  profilanswer
 

anapajari a écrit :

avant de faire ton opendir vérifie que le répertoire en question est "lisible" [:spamafote]


 
Oui mais un repertoire parent ( ../.. par exemple) sera lisible, par de probleme, mais je ne veux pas qu'il soit lu
 
Exemple
 
www
 + passwords
 + img
 + script
    + dir1
    + dir2
    - index.php
    - fichier1.txt
    - fichier2.txt
    - fichier3.txt
 
mon fichier index.php prend un parametre ?directory pour pouvoir lister un sous repertoire de script (index.php?directory=dir2 par exemple)
or si on utilise ce parametre avec .. alors on peut lister d'autres repertoires (index.php?directory=../passwords)
et je voudrais eviter ca en verifiant que le repertoire passe en parametre ?directory est bien dans le repertoire du script. (je ne sais pas trop si c'est clair, pour info, le script explorer Xp de psychokouak avait connu la meme faille a ses debuts)

n°1373979
davius
Posté le 24-05-2006 à 12:04:42  profilanswer
 

je fais quelques tests avec :
 
realpath($_GET['directory']);       --> c:\docs\wwwroot\script\dir1
$_SERVER["PHP_SELF"];             --> /script
 
d'ou probleme...

n°1373982
anapajari
s/travail/glanding on hfr/gs;
Posté le 24-05-2006 à 12:06:55  profilanswer
 

et si tu testais simplement que ton paramètre ne contient pas '..' ???

n°1373984
davius
Posté le 24-05-2006 à 12:07:59  profilanswer
 

J'y ai pense, mais cela ne marcherai plus si je fait
index.php?directory=/passwords

n°1373989
anapajari
s/travail/glanding on hfr/gs;
Posté le 24-05-2006 à 12:13:00  profilanswer
 

Bon alors clairement ton script est mal pensé :o
 
Il ne devrait pas prendre des chemins "relatifs" mais toujours pseudo-absolus.
Je m'explique:

  • si tu n'as pas de paramètres, il affiche par défaut ton répertoire www
  • si tu en as un(valeur='tonparamètre') il affiche www/tonparamètre/
  • et si tu souhaites un sous-répértoire, le paramètre doit alors être 'lerepertoire/lesousrepertoire/

n°1373999
davius
Posté le 24-05-2006 à 12:20:08  profilanswer
 

Justement, d'ou ma question de base, comment verifier que le parametre est bien un sous repertoire du repertoire dans lequel est contenu le script?
 
Si j'enleve .. ou / de mon parametre c'est boiteux comme solution...
 
donc je voudrais simplement obtenir le chemin (local, pas web) du script actuel

n°1374016
davius
Posté le 24-05-2006 à 12:33:06  profilanswer
 

Ca y est, enfin, je le tient :
 
$askedpath = realpath($_GET['d']);
$selfpath = dirname(realpath($_SERVER["DOCUMENT_ROOT"].$_SERVER["PHP_SELF"]));
if (strstr($askedpath, $selfpath))
{
      (afficher)
}


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Securisation d'un script de listage de fichiers [resolu]

 

Sujets relatifs
[RÉSOLU] Nom de fonction non reconnudébutant en java script
[Oracle] Execute Immediate ne fait rien ... ?[résolu]AWK: Probleme avec longueur des noms de fichiers de données
[RESOLU] Comment lancer excel en mode batch ?error handling vb script
[RESOLU] [VB] Appel d'une fonction sur sélection d'une casescript tout bête
[résolu] SSL, Certificat, & bad_record_mac[SHELL] petit script facil mais gros soucit
Plus de sujets relatifs à : Securisation d'un script de listage de fichiers [resolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR