Che cos'è il formato di file CGI?
L'estensione .cgi sta per Common Gateway Interface - un approccio standard per generare applicazioni web e contenuti dinamici sulle pagine web. L'estensione .cgi, quando applicata su un server web, fornisce un'interfaccia tra i programmi eseguibili e il server web che genera il contenuto del sito. Tutti questi programmi sono chiamati CGI o script CGI.
Questi file sono generalmente scritti utilizzando un linguaggio di scripting come Perl, Python o shell script, sebbene un file .cgi possa ugualmente essere un binario compilato (ad esempio, un programma C). L'estensione stessa non dice nulla sul linguaggio contenuto all'interno - la riga shebang all'inizio dello script, come #!/usr/bin/perl o #!/usr/bin/python3, indica al server web quale interprete invocare.
Uno script CGI viene eseguito sul server una volta per ogni richiesta HTTP in entrata. Legge i dati della richiesta dalle variabili d'ambiente (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) e accetta i dati del corpo POST tramite stdin, quindi scrive una risposta HTTP - intestazioni seguite dal contenuto del corpo - direttamente su stdout. Per funzionare, il file deve essere collocato in una directory abilitata ai CGI (tradizionalmente /cgi-bin/) e avere il permesso di esecuzione impostato sul server.
.cgi è uno standard di interfaccia, non un linguaggio di programmazione. Diversi altri formati di file condividono l'estensione .cgi: gli script .pl, .py o .sh vengono spesso rinominati in .cgi in modo che il server web li instradi attraverso il meccanismo CGI. Poiché il CGI genera un nuovo processo per ogni richiesta, risulta lento su larga scala ed è stato ampiamente sostituito da FastCGI, mod_php, WSGI e moderni application server - sebbene rimanga supportato sulla maggior parte dei server web odierni.
Sicurezza e incolumità
RISCHIO: MEDIUMLeggere un .cgi in un editor di testo è sicuro - non verrà eseguito semplicemente aprendolo. Il rischio risiede nell'ESECUZIONE su un server: gli script CGI girano con i privilegi del server e storicamente rappresentano una superficie di vulnerabilità web importante (il bug Shellshock del 2014 è stato sfruttato ampiamente tramite script shell CGI; i CGI scritti male consentono command injection, path traversal ed esecuzione di codice arbitrario). Non distribuire mai un .cgi scaricato che non comprendi, mantieni aggiornati gli interpreti e il server, limita i permessi di /cgi-bin/ e preferisci alternative come FastCGI o application server per i nuovi lavori. Tratta i sorgenti CGI sconosciuti come codice non attendibile da revisionare prima dell'esecuzione.
Dettagli del formato
in sintesi- EToys / dati app di nicchia che usano .cgi - Alcune applicazioni non correlate hanno riutilizzato .cgi per i propri file di dati; su un server web un .cgi è quasi sempre uno script gateway.
Programmi che aprono file CGI
Dettagli tecnici
specifiche approfondite| Tipo MIME | application/x-httpd-cgi |
| Tipi MIME alternativi | text/plain, application/octet-stream |
| Codifica del file | Testo semplice (ASCII/UTF-8) per gli script; binario nativo per gli eseguibili compilati |
| Firma del file | Nessun magic byte fisso - gli script testuali iniziano con una riga shebang (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh, ecc.); i binari CGI compilati portano l'intestazione eseguibile della piattaforma (ELF su Linux, MZ su Windows) |
| Modello di esecuzione | Il server web esegue il fork di un nuovo processo del sistema operativo per ogni richiesta HTTP per eseguire lo script o il binario; il processo termina dopo l'invio della risposta |
| Meccanismo di input | Dati della richiesta consegnati tramite variabili d'ambiente (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, intestazioni HTTP_*); corpo POST passato tramite stdin |
| Meccanismo di output | Lo script scrive le intestazioni di risposta HTTP (righe Nome: valore) seguite da una riga vuota e dal corpo della risposta direttamente su stdout |
| Distribuzione richiesta | Il file deve risiedere in una directory abilitata ai CGI (convenzionalmente /cgi-bin/) con il bit di esecuzione impostato; l'utente del server web necessita dei permessi di lettura ed esecuzione |
| Linguaggi di scripting tipici | Perl, Python, Bash/shell, Ruby, C (compilato in un binario nativo) |
| Dimensione tipica del file | 1 KB - 100 KB per gli script di testo; maggiore per i binari compilati |
| Compressione | Nessuna all'interno del file stesso; il corpo della risposta HTTP può essere compresso separatamente tramite gzip dallo script o dal server |
| Supporto piattaforma | Linux, Unix, macOS, Windows - qualsiasi sistema operativo che esegua un server web compatibile con CGI |
| Server web comuni | Apache HTTP Server, Nginx (tramite wrapper FastCGI), lighttpd, Microsoft IIS |
| Caratteristica prestazionale | Lento su larga scala - ogni richiesta genera e distrugge un nuovo processo; sostituito da FastCGI, WSGI e ASGI per implementazioni ad alto traffico |
| Considerazioni sulla sicurezza | Il sorgente dello script è leggibile su disco; proteggere con permessi file rigorosi ed evitare di esporre la directory CGI tramite un URL diretto al di fuori del percorso /cgi-bin/ designato |
| Rilasciato | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Ultima versione | CGI/1.1 (RFC 3875, October 2004) |
| Standard aperto | Sì · royalty-free |
| Specifica | www.rfc-editor.org |
Conversioni CGI
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file CGI.