Aller au contenu

Question sur la sécurité...


Bourinho

Sujets conseillés

Bonjour,

J'étais en train de coder tranquillement et une question m'est venue à l'esprit... on connait la faille PHP concernant les "include". Cependant, les pirates peuvent utiliser cette faille à l'envers!!!

En effet, les pirates tentent de profiter de cette faille en faisant inclure des lignes de codes malveillantes sur votre serveur... Mais, je pense que le pirate peut éventuellement inclure certains de vos fichiers.

En fait, je m'apprétais à créer un fichier connexion.php

<?php //# Connect to the database
$dbhost = "localhost";
$dbuname = "root";
$dbpass = "";
$dbname = "mabase";
$MonDomaine='http://127.0.0.1/MonSite/';//et oui, c'est en local pour l'instant :-(

$GLOBALS["db_connexion"]=@mysql_connect($dbhost,$dbuname,$dbpass) or die ("CONNEXION IMPOSSIBLE");
$GLOBALS["db"]=@mysql_select_db($dbname, $GLOBALS["db_connexion"]);
?>

Après, je me suis dis, "Bah ouais, pour l'instant, t'es en local, mais un jour, va peut être falloir faire découvrir tout ce que tu veux dévoiler d'intéressant sur la toile!!!!"... et donc ce fichier comprend toutes mes coordonnées!!!!

Donc, une personne malveillante, crée un fichier php avec

_include(&quot;http://www.lesitedebourinho.fr/connexion.php")

_une requete SQL dans la table "membre" pour s'ajouter un petit compte Admin, et hop, vas-y que je te fous un bordel monstre!!! (DROP DROP DROP...)

Alors, je me dis qu'il serait mieux que dans tous les fichiers, si la connexion à la base de données a été initialisée il faut qu'elle soit systématiquement coupée à la fin de ce même fichier...

Suis-je parano??? :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Tu es complètement parano ;)

Je n'ai pas bien compris ce que tu crains concernant les failles include "à l'envers"... N'oublie pas que les fichiers de configuration sont executés à la sortie, et donc que si tu les inclus de l'extérieur, tu ne récupéreras rien.

D'autant plus que normalement, un utilisateur ne peut pas executer de code par une faille autre qu'un include, ou qu'un problème d'upload de fichier sur le serveur cible, vu que toutes les données entrantes ($_GET,$_POST) ne sont pas interprétées (mais après, par contre, tu peux avoir des failles par injections SQL).

Lien vers le commentaire
Partager sur d’autres sites

Salut,

C'est bien ce que je pensais... Merci beaucoup de confirmer ma paranoia!!! Je préfère demander confirmation de temps en temps quand les choses ne sont pas absolument sures dans ma tête!!! Disons que c'est de l'anticipation... bon, bah je retourne coder avec l'esprit léger... ;) Encore merci!

Edit : En fait, je pense qu'il va falloir que je me tourne vers quelques articles sur les protocoles ftp et http... C'est de la que doit venir ma confusion... enfin je pense...

Modifié par Bourinho
Lien vers le commentaire
Partager sur d’autres sites

Lorsque tu fais un include d'un fichier .php au départ de n'importe quel langage et au départ d'un serveur différent de celui sur lequel se trouve le fichier, le fichier que tu demandes n'est pas inclus, mais c'est son interprétation par le serveur cible qui est incluse.

Il n'est donc pas possible de connaître les valeurs de tes variables.

La seule manière d'obtenir les variables est de faire un include sur le même serveur en ne passant pas par http... donc en faisant un include avec le chemin serveur complet du fichier.

Toute demande par http est traitée par Apache, et dans le cas de fichiers php est traitée par php avant l'envoi des données. :)

Dan

Lien vers le commentaire
Partager sur d’autres sites

Merci à tous pour toutes ces informations complémentaires!!! Je vais finir par réussir à le mettre en route ce site Internet, c'est moi qui vous le dit!!! ;)

Lien vers le commentaire
Partager sur d’autres sites

Pour vérifier, tu peux toujours taper dans le navigateur l'adresse complète de la page où tu penses que le risque existe. Par exemple :

http://monsite.com/configuration/connexion.php

Là, tu auras surement une page blanche. C'est ce qu'aura le 'pirate' qui essayerais l'include que tu imagines.

Attention !!

Pour avoir la page blanche, il te faut TOUJOURS mettre l'extension .php.

Tu peux très bien créer un fichier connexion.txt, qui sera pris en compte par ton programme (avec la commande include('connexion.txt');

Ca marchera pareil que si tu mettait l'extension .php.

Mais dans ce cas (cas de l'extension .txt), toute personne tapant l'adresse directe de la page aurait accès aux informations de connexion !!

Et là, oui, c'est une erreur énorme !!

Lien vers le commentaire
Partager sur d’autres sites

Merci pour cet eclaircissement...

Donc, si j'ai bien compris, si je fais l'include de connexion.txt dans lapage.php, l'interpretation de connexion.txt se fait dans lapage.php tandis que si je fais l'include de connexion.php dans lapage.php, l'interpretation ce fait dans connexion.php .

Ok... bon, bah on va eviter la boulette alors!!! ;)

Merci encore!

Lien vers le commentaire
Partager sur d’autres sites

Non.. Dans les 2 cas l'"interprétation" se fait dans le script qui fait l'include, autrement dit dans 'lapage.php'.

Mais dans un cas le script (connexion.txt) est visible directement dans le navigateur, alors que dans l'autre, il passe par le parser php, qui fait qu'il est interprété (en php).

Donc, dans le premier cas (avec .txt) il est visible dans le navigateur comme tel, alors que dans l'autre cas, il sera 'interprété' en php, et donc (si on met des variables ou des 'define', il ne sera pas visible.

Essaie avec un fichier .txt et un autre .php, et mets y le code suivant :

<?
$var1 = "toto";
$var2 = "titi";
?>

dans le cas du .txt, tu as bien le code qui apparait tel quel dans le navigateur. Dans le cas du .php, tu n'as rien du tout. ;)

Lien vers le commentaire
Partager sur d’autres sites

Attention aux erreurs fréquentes : par exemple nommer un fichier include en .inc !!

Il FAUT IMPERATIVEMENT nommer ces fichiers en .inc.php si on ne veut pas mettre ses paramètres à disposition de tous !

Les fichiers .inc ne sont PAS interprétés par Php.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Ok, ok, ok... Je ne regrette donc pas d'avoir cette question qui peut paraitre "bête" mais dont la réponse ne l'est pas... ;)

Bon, bah voilà un point d'éclairci! Une boulette que je ne ferai donc pas...enfin j'espère!

Encore merci.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...