HSC
Network Security Consulting Agency Since 1989 - Specialized in Unix, Windows, TCP/IP and Internet
Text mode: access to the page content
Hervé Schauer Consultants
You are here: Home > Resources > Tips > Wrappeur universel de CGI
Go to: HSC Trainings
Télécharger le catalogue des formations
Search:  
Version française
   Services   
o Skills & Expertise
o Consulting
o ISO 27001 services
o Audit & Assessment
o Penetration tests
o Vunerability assessment (TSAR)
o Forensics
o ARJEL
o Training courses
o E-learning
   Conferences   
o Agenda
o Past events
o Tutorials
   Resources   
o Thematic index
o Tips
o Lectures
o Courses
o Articles
o Tools (download)
o Vulnerability watch
   Company   
o Hervé Schauer
o Team
o Job opportunities
o Credentials
o History
o Partnerships
o Associations
   Press and
 communication
 
 
o HSC Newsletter
o Bulletin juridique HSC
o Press review
o Press releases
o Publications
   Contacts   
o How to reach us
o Specific inquiries
o Directions to our office
o Hotels near our office
|>|Wrappeur universel de CGI  

by Nicolas Jombart (05/08/2001)



Wrappeur de CGI universel

Un serveur web peut être vulnérable de deux principales manières : les
attaques sur le logiciel serveur lui-même, (vulnérabilité de l'application,
du traitement des requêtes, des modules, etc.) et les attaques sur les CGI
écrits spécifiquement.
Pour se protéger, il s'agira dans le premier cas de surveiller et de mettre à 
jour lorsqu'une faille est connue, le deuxième cas s'avère parfois plus 
difficile à appréhender, surtout lorsqu'on a pas accès au code-source, ou qu'il 
est trop complexe ou impossible pour des raisons de droits à modifier.

Les scripts CGI, et de manière générale tous les programmes, doivent
considérer les informations arrivant de l'extérieur comme non-sûres et les 
vérifier (type de données, taille, ...) avant de les traiter. 
Dans notre cas, cet extérieur est l'internet via les paramètres passés 
(dans un fonctionnement normal) par un navigateur.

Le wrappeur proposé ici permet de filtrer tous les paramètres au moyens de
plusieurs éléments, qui sont renseignés dans un fichier de configuration,
paramètre par paramètre :
. La taille minimum des valeurs du paramètre
. La taille maximum
. Une expression régulière visant à vérifier le type de données

Le wrappeur est donc à appeler par l'utilisateur à la place du véritable
CGI. (i.e. il remplace le script réel au niveau de l'URL)
Il vérifiera les paramètres, et s'occupera de lancer la véritable
application, avec les paramètres ainsi vérifiés. En cas d'erreur dans la
vérification, une page d'erreur est renvoyée, facilement personnalisable.

L'utilisation d'une expression régulière permettra par exemple d'empêcher de
placer des caractères comme "%" ou "|" dans un nom de personne, deux
caractères fréquemment utilisés dans les attaques contres les CGI,
notamment ceux écrits en perl.

Un étoile précédent un paramètre signifie que celui-ci est requis, et 
causera une erreur s'il n'est pas présent ou qu'il ne convient pas à
l'expression régulière. Les autres paramètres qui enfreignent la règle
imposée par l'expression régulière sont simplement retirés et ne seront pas 
passés au script réel. 
Si un paramètre est omis dans la configuration et qu'il est renseigné dans
la requête traitée, il n'est également pas passé au script réel. Ceci peut
prévenir de remplir arbitrairement des variables.
Pour des renseignements plus complets, voir la documentation de cgi-wrapper.

Exemple de fichier de configuration pour ht://dig, le très connu moteur de
recherche :
(Référez-vous à la documentation d'htdig pour les valeurs des paramètres)

----------
# CGI wrapper script
# parameter:regexp:min_length:man_length

# nom du script réel à appeler
_script_:htsearch:0:0

# paramètres
# config : seulement "fr" ou "en" dans notre cas
config:^(fr|en)$:0:0

# mot à rechercher : seulement des lettres, des chiffres, et
# quelques caractères autorisés : - _ + \ / [ ] @ ~ et les espaces
*words:^([a-zA-Z0-9\-_\+\\\/\[\]@~ ]+)$:1:200

# méthode de recherche : seulement "and" "or" et "boolean"
# la taille 0 signifie illimité car l'expression régulière est
# suffisamment restrictive
method:^(and|or|boolean)$:0:0

# format des résultats : long ou short
format:(long|short)$:0:0

# méthode de tri : mot-clefs utilisés par htdig
sort:(score|time|title|revscore|revtime|revtitle)$:0:0

# nombre de liens trouvés par page : seulement des chiffres
matchesperpage:^([0-9]+)$:1:100

# numéro de page : seulement des chiffres
page:^([0-9]+)$:1:20

# restrict, exclude et keywords : comme le paramètre words
restrict:^([a-zA-Z0-9\-_\+\\\/\[\]@~ ]+)$:1:100
exclude:^([a-zA-Z0-9\-_\+\\\/\[\]@~ ]+)$:1:100
keywords:^([a-zA-Z0-9\-_\+\\\/\[\]@~ ]+)$:1:200
----------

Le script est téléchargeable à l'adresse suivante :
clic.

--Nicolas Jombart <Nicolas.Jombart@hsc.fr>

$Id: cgi-wrapper.tip,v 1.8 2003/11/10 19:53:23 jombart Exp $



Last modified on 12 November 2003 at 13:55:00 CET - webmaster@hsc.fr
Mentions légales - Information on this server - © 1989-2013 Hervé Schauer Consultants