CGI:Introduction
Un article de WikiTuto.
Sommaire |
Aperçu
Le CGI (pour Common Gateway Interface) n'est pas un langage de programmation. Il s'agit d'un protocole qui peut être utilisé dans un échange de données entre des formulaires sur des pages Web, et un programme à proprement parler. Un script CGI peut être écrit dans n'importe quel langage de programmation capable de lire l'entrée par défaut (stdin), d'écrire sur la sortie par défaut (stdout), et de lire des variables d'environnement. Cela inclut aussi bien des langages compilés comme le Langage C que des langages de "scripting" comme le Perl, voire même ce que l'on appelle du "shell-scripting".
La structure d'un script CGI est simple ; un séquence typique d'opérations est la suivante :
- lire les données du formulaire rempli par l'utilisateur ;
- "cuisiner" ces données ;
- écrire la réponse en HTML sur la sortie standard.
Toutes ces opérations ont lieu côté serveur, ce qui permet d'envisager un interfaçage avec d'autres applications, mais soulève aussi, nous le verrons, des questions en ce qui concerne la sécurité.
Choix d'un langage de programmation
Le langage utilisé pour écrire un script CGI peut être n'importe lequel, pourvu que le programme produit puisse tourner sur le serveur ; cela signifie qu'il doit être adapté à la fois à son processeur et à son système d'exploitation. Il doit être capable de lire l'entrée standard, d'écrire sur la sortie standard, et de lire des variables d'environnement. En pratique, presque tous les langages conviennent, à l'exception notable du Javascript, si l'on se limite au champ des langages plus spécifiquement dédiés au développement d'applications en ligne, puisqu'un script Javascript tourne sur le poste client. Il existe cependant des exemples de scripts CGI écrits en Javascript côté serveur.
Les langages les plus utilisés sont Perl, C, C++, et quelques langages de shell Unix. Mais on peut également envisager l'écriture de scripts en (Visual) Basic, Pascal, Fortran, Tcl/Tk, en Python, etc. Le choix d'un langage particulier peut être guidé par plusieurs considérations :
- La performance : un langage compilé (comme le Langage C) est plus rapide qu'un langage interprété (comme le PHP). POur peu qu'il y ait beaucoup de trafic sur le site, des requêtes continuelles alourdissent la charge de travail du serveur. Cependant, pour beaucoup de sites, cette question de la gestion du trafic se pose avec moins d'acuité. En règle générale, en fait, ce gain en rapidité ne peut pas être un argument déterminant en faveur de telle ou telle option.
- La sécurité : nous reviendrons sur ce point fondamental plus loin. Une idée généralement répandue est qu'un langage compilé est plus sûr qu'un langage interprété, car le seul fichier accessible, dans ce cas, est le binaire exécutable, dont les failles éventuelles de sécurité sont plus difficiles à trouver qu'un simple script interprété, dont le source est publiquement accessible. De plus, un langage interprété nécessite l'usage d'un... interpréteur, qui peut lui-même présenter des failles de sécurité. Cependant, un langage compilé peut présenter des failles de sécurité qui lui sont propres, par exemple dans le contrôle de la longueur des chaînes de caractères transmises. En règle générale, ce point de la sécurité ne doit inciter qu'à prêter une attention particulière aux éventuelles failles de votre propre code.
- La fiabilité : il faut utiliser un langage dont la stabilité sur la plateforme a été prouvée. Il est ainsi peu recommandé de coder en Applescript sur une machine UNIX, à supposer qu'un version d'Applescript existe pour ce système ; il serait tout aussi peu judicicieux de coder en Visual C++ sur un Mac, ou bien en shell dans le cadre d'une émulation Linux sur un PC tournant sous Windows...
- La facilité de maintenance : c'est souvent un sujet préoccupant pour les programmeurs CGI. Les langages interprétés sont ainsi souvent préférés car ils sont en général plus facile à lire, comprendre, maintenir, tester et déboguer ; mais les environnements de développement intégrés que l'on trouve pour la plupart des langages compilés aujourd'hui rendent également cette tâche plus facile.
- La portabilité : écrire un code portable est un des fondamentaux de la programmation CGI. Les raisons en sont évidentes : déménagement possible d'un serveur web sur une autre machine, distribution du code à une tierce personne, évolution du code en fonction d'une mise à jour du système d'exploitation, etc. Les langages interprétés sont alors souvent un bon choix ; Perl par exemple a été porté depuis Unix sous Windows avec des performances et des fonctionnalités comparables. Un script CGI écrit dans un langage compilé devra au minimum être recompilé à chaque déménagement. Si de plus des procédures et/ou fonctions spécifiques à un système donné sont utilisées, les parries du code qui leur font appel devront être réécrites.
En définitive, le langage le plus conseillé est celui avec lequel on se sent le plus à l'aise, au moins pour commencer, pour prendre en compte de la manière la plus efficace possible les problèmes liés à la sécurité.
Installer un script CGI
En raison des éventuelles failles de sécurité d'un script, la majorité, si ce n'est la totalité, des hébergeurs gratuits n'autorisent pas l'installation de scripts CGI ; ils proposent en revanche souvent quelques scripts "maison", validés. Ces scripts sont stockés dans un répertoire auquel vous n'avez généralement, dans ce cas, pas accès, le répertoire cgi-bin.
Un fichier présent dans un répertoire peut être "exécutable" : sous Windows, il peut se terminer par l'extension .EXE ou .COM ; sous Unix, il est "marqué" exécutable pour tous les utilisateurs. En règle générale, le serveur est configuré de telle sorte que seuls les fichiers présents dans ce répertoire seront autorisés à l'exécution. Dans le cas de scripts écrits dans un langage compilé, on prévoit en général un deuxième répertoire, dans lequel les sources sont stockés, le répertoire cgi-src. Installer un script CGI revient dans ce cas à copier le fichier source dans ce répertoire, le compiler ensuite localement, puis déplacer l'exécutable dans le répertoire cgi-bin.



