IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Question de sécurité


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut Question de sécurité
    Bonjour,

    J'ai pris par habitude lors de la création des sites en intranet de mettre une fonction j'ai mis au point si-dessous pour faire appel a mes page php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // Fonction permetant d'injecter la page approprié selon la valeur de $page,
     
    function Body ()
    {
     
    // si vide appel le fichier body
        if(!isset( $_GET['page'] ) or $_GET['page']=="" )
        {
           include("body.php");
        }
    // si $page pas vide, apel des page selon la valeur de $page
        else {
     
        $page = $_GET['page'] ;
     
         include("$page.php");
     
         }
    }
    Vu que je développer en intranet, je me fouté du niveau de sécurité, mais je me demande quand même si cette fonction est fiable.

  2. #2
    Membre expérimenté
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    Salut,

    c'est pas très sécurisé, ca s'apparente même à une faille include

    On peut inclure n'importe quel fichier php présent sur ton serveur en passant dans la variable get le chemin vers un de ces fichiers.

    Après, c'est pas forcemment exploitable, ...

    Mais j'effectuerais quand même quelques vérifications sur la variable $page. Par exemple, en vérifiant si elle appartient à un tableau listant les pages dont le chargement est prévu et autorisé.

  3. #3
    Membre confirmé Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Par défaut
    C'est vrais, mais je me disais que si le fichier en question n'existe pas, la page affichera une erreur d'include.

    J'ai suivi ton conseil en listant dans un tableau les fichiers existants du répertoire ou se trouve mes page php, puis je teste l'existence de page


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
    function Body ()
    {
     
     
        if(!isset( $_GET['page'] ))// si il n'existe pas
        {
          include("body.php");// inclure body.php
        }
     
        else // si existe
        {   
            if(empty ($_GET['page'])) // mais vide 
            {
                  include("body.php");// inclure body.php
            }
            else // sinon nous listons les fichiers du repertoire ou se trouve nos page php dans le tableau
            {
     
                $page = $_GET['page'].".php"; // nous ajoutons l'extension php
     
                $mydir = "./"; // le dossier ou se trouve nos fichiers
                if ($dir = @opendir($mydir)) 
                {
                  while (($file = readdir($dir)) !== false) 
                  {
                    if($file != ".." && $file != ".")
                    {
                      $filelist[] = $file;// nous les metons dans un tableau
                    }
                  } 
                  closedir($dir);
                }
                //Test a faire pour ne pas avoir d'erreur si il n'y a pas de fichier dans le dossier
                if(sizeof($filelist) != '0') 
                {
                  sort($filelist);
                }
     
                if(in_array($page, $filelist, true)) // nous testons l'existance de la page.php dans le tableau
                {
                  include("$page"); // si Ok inclure
                } 
                else 
                {
                include("body.php");// sinon inclure body.php
                }
     
            } // fin de else empty ($_GET['page']))
     
        } // Fin de else !isset( $_GET['page']
    } ?>
    Je pense que c'est mieux

  4. #4
    Membre expérimenté
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    Ca ma l'air bien.

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    if ($dir = @opendir($mydir)) 
                {
                  while (($file = readdir($dir)) !== false) 
                  {
                    if($file != ".." && $file != ".")
                    {
                      $filelist[] = $file;// nous les metons dans un tableau
                    }
                  } 
                  closedir($dir);
                }
                //Test a faire pour ne pas avoir d'erreur si il n'y a pas de fichier dans le dossier
                if(sizeof($filelist) != '0') 
                {
                  sort($filelist);
                }
     
                if(in_array($page, $filelist, true)) // nous testons l'existance de la page.php dans le tableau
                {
                  include("$page"); // si Ok inclure
                } 
                else 
                {
                include("body.php");// sinon inclure body.php
                }
    Devrais pouvoir se remplacer par un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(file_exists($mydir.$page))
        include("$page");
    else
        include("body.php");
    A mon avis beaucoup plus simple et performant (car fonction native) qu'un parcours de dossier à chaque ouverture de page.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre expérimenté
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    C'est pas une solution d'utiliser file_exists.

    J'ai testé (je suis en vacances) et file_exists renvoie vrai lorsqu'on utilise des chemins relatifs.

    Donc on peut toujours inclure n'importe quel fichier présent sur le serveur pour lequel php à les droits en injectant dans la variable page passée en get des chemins comme ../../conf/db.

    Par contre l'utilisation de la fonction glob permettrait de récupérer la liste des pages du dossier en 1 ligne de code et ca me parait être la bonne alternative.

Discussions similaires

  1. [Sécurité] question de sécurité
    Par aymen85 dans le forum Langage
    Réponses: 6
    Dernier message: 26/06/2007, 16h56
  2. [Sécurité] Question de sécurité
    Par jc_cornic dans le forum Langage
    Réponses: 5
    Dernier message: 22/12/2006, 09h27
  3. Réponses: 5
    Dernier message: 22/09/2006, 03h13
  4. [Sécurité] Diverses questions de sécurité
    Par altadeos dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2006, 00h09
  5. Question difficile.(sécurité ACCESS)
    Par Jahprend dans le forum Sécurité
    Réponses: 11
    Dernier message: 09/06/2006, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo