Qu'est-ce que le format de fichier CGI ?
L'extension .cgi signifie Common Gateway Interface - une approche standard pour générer des applications web et du contenu dynamique sur les pages web. L'extension .cgi, lorsqu'elle est appliquée sur un serveur web, fournit une interface entre les programmes exécutables et le serveur web qui génère le contenu du site. Tous ces programmes sont appelés CGI ou scripts CGI.
Ces fichiers sont généralement écrits à l'aide d'un langage de script tel que Perl, Python ou shell script, bien qu'un fichier .cgi puisse également être un binaire compilé (par exemple, un programme C). L'extension elle-même ne dit rien sur le langage utilisé - la ligne shebang tout en haut du script, telle que #!/usr/bin/perl ou #!/usr/bin/python3, indique au serveur web quel interpréteur invoquer.
Un script CGI s'exécute sur le serveur une fois par requête HTTP entrante. Il lit les données de la requête à partir des variables d'environnement (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) et accepte les données du corps POST via stdin, puis écrit une réponse HTTP - les en-têtes suivis du contenu du corps - directement sur stdout. Pour fonctionner, le fichier doit être placé dans un répertoire compatible CGI (traditionnellement /cgi-bin/) et avoir les permissions d'exécution définies sur le serveur.
.cgi est un standard d'interface, pas un langage de programmation. Plusieurs autres formats de fichiers partagent l'extension .cgi : les scripts .pl, .py ou .sh sont souvent renommés en .cgi pour que le serveur web les traite via le mécanisme CGI. Parce que le CGI génère un nouveau processus pour chaque requête, il est lent à grande échelle et a été largement remplacé par FastCGI, mod_php, WSGI et les serveurs d'applications modernes - bien qu'il reste supporté sur la plupart des serveurs web aujourd'hui.
Sécurité et sûreté
RISQUE : MEDIUMLire un .cgi dans un éditeur de texte est sûr - il ne s'exécutera pas en étant ouvert. Le risque réside dans l'EXÉCUTION sur un serveur : les scripts CGI s'exécutent avec les privilèges du serveur et constituent historiquement une surface de vulnérabilité web majeure (le bug Shellshock de 2014 a été exploité largement via des scripts shell CGI ; des CGI mal écrits permettent l'injection de commandes, la traversée de répertoires et l'exécution de code arbitraire). Ne déployez jamais un .cgi téléchargé que vous ne comprenez pas, maintenez les interpréteurs et le serveur à jour, restreignez les permissions de /cgi-bin/ et préférez les alternatives FastCGI/serveur d'applications pour les nouveaux projets. Traitez toute source CGI inconnue comme du code non fiable à examiner avant exécution.
Détails du format
en bref- EToys / données d'applications spécifiques utilisant .cgi - Quelques applications non liées ont réutilisé .cgi pour leurs propres fichiers de données ; sur un serveur web, un .cgi est presque toujours un script d'interface.
Programmes qui ouvrent les fichiers CGI
Détails techniques
spécifications approfondies| Type MIME | application/x-httpd-cgi |
| Types MIME alternatifs | text/plain, application/octet-stream |
| Encodage du fichier | Texte brut (ASCII/UTF-8) pour les scripts ; binaire natif pour les exécutables compilés |
| Signature de fichier | Pas d'octets magiques fixes - les scripts texte commencent par une ligne shebang (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh, etc.) ; les binaires CGI compilés portent l'en-tête exécutable de la plateforme (ELF sur Linux, MZ sur Windows) |
| Modèle d'exécution | Le serveur web crée un nouveau processus système par requête HTTP pour exécuter le script ou le binaire ; le processus s'arrête après l'envoi de la réponse |
| Mécanisme d'entrée | Données de requête transmises via des variables d'environnement (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, en-têtes HTTP_*) ; corps POST transmis via stdin |
| Mécanisme de sortie | Le script écrit les en-têtes de réponse HTTP (lignes Nom: valeur) suivis d'une ligne vide et du corps de la réponse directement sur stdout |
| Déploiement requis | Le fichier doit résider dans un répertoire compatible CGI (conventionnellement /cgi-bin/) avec le bit d'exécution activé ; l'utilisateur du serveur web a besoin des permissions de lecture et d'exécution |
| Langages de script typiques | Perl, Python, Bash/shell, Ruby, C (compilé en binaire natif) |
| Taille de fichier typique | 1 Ko - 100 Ko pour les scripts texte ; plus volumineux pour les binaires compilés |
| Compression | Aucune dans le fichier lui-même ; le corps de la réponse HTTP peut être compressé en gzip séparément par le script ou le serveur |
| Plateformes supportées | Linux, Unix, macOS, Windows - tout système d'exploitation exécutant un serveur web compatible CGI |
| Serveurs web courants | Apache HTTP Server, Nginx (via wrapper FastCGI), lighttpd, Microsoft IIS |
| Caractéristiques de performance | Lent à grande échelle - chaque requête crée et détruit un nouveau processus ; remplacé par FastCGI, WSGI et ASGI pour les déploiements à fort trafic |
| Considérations de sécurité | La source du script est lisible sur le disque ; protégez-la avec des permissions de fichiers strictes et évitez d'exposer le répertoire CGI via une URL directe en dehors du chemin /cgi-bin/ désigné |
| Publié | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Dernière version | CGI/1.1 (RFC 3875, October 2004) |
| Standard ouvert | Oui · libre de droits |
| Spécification | www.rfc-editor.org |
Conversions CGI
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers CGI.
Foire aux questions
Qu'est-ce qu'un fichier .cgi ?
Comment ouvrir un fichier .cgi ?
/cgi-bin/ du serveur, rendez-le exécutable et appelez son URL ; les CGI ne s'exécutent pas par un double-clic.Pourquoi mon navigateur affiche-t-il le code CGI au lieu de l'exécuter ?
/cgi-bin/ et corrigez les permissions.