[php] Avis sur la sécurité de mon code (include)


GarGamel55
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 28 Sep 2006

[php] Avis sur la sécurité de mon code (include)

Message le Dim Oct 01, 2006 13:25

Bonjour à tous,

Je voulais avoir votre avis sur la sécurité (ou l'insécurité) de ce bout de code :

Code: Tout sélectionner
$p='';
if (isset($_GET['page'])) $p=$_GET['page'];
if (!empty($p) && file_exists('rep/'.$p.'.php')) include('rep/'.$p.'.php');
else include('accueil.php');


Depuis mon index j'appelle différentes pages qui viennent s'ouvrir dans le centre de celui-ci (pseudo frame). Evidemment cela implique d'éventuels problèmes de sécurité.
N'étant pas du tout un hacker averti, je voulais savoir si ce code est exploitable par une personne mal attentionée ? :twisted:

Merci d'avance


Kaio
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 15
Inscription: 9 Aoû 2006

Message le Dim Oct 01, 2006 13:34

Salut,

On peut inclure n'importe quelle page php de ton site et pas seulement dans le répertoire "rep".

exemple : ?page=../rep_admin/index

++


GarGamel55
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 28 Sep 2006

Message le Dim Oct 01, 2006 13:43

Kaio a écrit:Salut,

On peut inclure n'importe quelle page php de ton site et pas seulement dans le répertoire "rep".

exemple : ?page=../rep_admin/index

++


Je suis en local uniquement pour l'instant et quand j'appelle un fichier en dehors du repertoire 'rep' je retombe pourtant sur la page d'accueil.
(mais comme je précise je suis pas hacker ...)

et comment je peux y rémédier, via un array qui liste les pages autorisés ?


GarGamel55
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 28 Sep 2006

Message le Dim Oct 01, 2006 14:51

J'ai rajouté ceci

Code: Tout sélectionner
$p='';
if (isset($_GET['page'])) $p=$_GET['page'];
$pageok = array('', 'accueil', 'page1', 'page2'....);
if (!in_array($p, $pageok)) {

   include('accueil.php');
}
if (!empty($p) && file_exists('rep/'.$p.'.php')) include('rep/'.$p.'.php');
else if (!empty($p) && file_exists($p.'.php')) include($p.'.php');
else include('accueil.php');


Est-ce suffisant ?[/quote]


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Dim Oct 01, 2006 17:05

j'éviterai ce type de shema

le mécanisme empêche potentiellement une injection jusqu'au jour ou l'on découvre un bug sur une fonction

et la ton filtre saute et tu es vulnerable

faut savoir que les caractères du style ? & @ et # modifient les interprétations d'url

pour injecter ton site faudrait bugger in_array et file_existe ce qui n'est pas possible actuellement (à ma connaissance)

mais la vraie solution est d'inclure une constante

rog


GarGamel55
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 28 Sep 2006

Message le Dim Oct 01, 2006 18:05

rog a écrit:
mais la vraie solution est d'inclure une constante


Tu pourrais développer stp ? :idea:


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Dim Oct 01, 2006 18:12

aie

une variable est une donnée qui est modifiable
une constante est une donnée que l'on ne peut modifier

voir define

rog


Kaio
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 15
Inscription: 9 Aoû 2006

Message le Dim Oct 01, 2006 19:51

Tu aurais pu simplement virer les "../" de ta variable $p

Faire un tableau c'est bien mais pas vraiment pratique puisque tu dois ajouter chaque nouvelle page que tu autorises...

Le mieux c'est de faire de l'url rewriting. Si on tente de se ballader sur ton site par l'include avec du "../" ça ne marche pas car le serveur tente d'abord de changer de répertoire... 8)


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Dim Oct 01, 2006 20:22

même si la chaine commence par un @ ?

rog


GarGamel55
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 28 Sep 2006

Message le Lun Oct 02, 2006 11:40

rog a écrit:aie

une variable est une donnée qui est modifiable
une constante est une donnée que l'on ne peut modifier

voir define

rog


lol, j'étais parti sur complétement autre chose ...

Faire un tableau c'est bien mais pas vraiment pratique puisque tu dois ajouter chaque nouvelle page que tu autorises...

Le mieux c'est de faire de l'url rewriting. Si on tente de se ballader sur ton site par l'include avec du "../" ça ne marche pas car le serveur tente d'abord de changer de répertoire...


Oui l'array n'est pas ultra pratique, mais le nombre de page que je devrais autoriser sera limité

Et j'utilise aussi l'url rewriting

8)

Merci pour vos réponses


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: sim100 et 1 invité