Wat is het CGI-bestandsformaat?
De extensie .cgi staat voor Common Gateway Interface - een standaardaanpak om webapplicaties en dynamische inhoud op webpagina's te genereren. De .cgi-extensie biedt, wanneer toegepast op een webserver, een interface tussen uitvoerbare programma's en de webserver die de website-inhoud genereert. Al dergelijke programma's worden CGI's of CGI-scripts genoemd.
Deze bestanden worden over het algemeen geschreven in een scripttaal zoals Perl, Python of shell script, hoewel een .cgi-bestand evengoed een gecompileerd binair bestand kan zijn (bijvoorbeeld een C-programma). De extensie zelf zegt niets over de taal binnenin - de shebang-regel bovenaan het script, zoals #!/usr/bin/perl of #!/usr/bin/python3, vertelt de webserver welke interpreter moet worden aangeroepen.
Een CGI-script draait op de server eenmaal per inkomend HTTP-verzoek. Het leest verzoekgegevens uit omgevingsvariabelen (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) en accepteert POST-bodygegevens via stdin, en schrijft vervolgens een HTTP-respons - headers gevolgd door de inhoud - rechtstreeks naar stdout. Om te functioneren moet het bestand in een voor CGI geactiveerde map worden geplaatst (traditioneel /cgi-bin/) en moet de uitvoerbare permissie op de server zijn ingesteld.
.cgi is een interfacestandaard, geen programmeertaal. Verschillende andere bestandsformaten delen de .cgi-extensie: .pl, .py of .sh scripts worden vaak hernoemd naar .cgi zodat de webserver ze via het CGI-mechanisme routeert. Omdat CGI voor elk verzoek een nieuw proces start, is het traag bij grote schaal en is het grotendeels vervangen door FastCGI, mod_php, WSGI en moderne applicatieservers - hoewel het op de meeste webservers vandaag de dag nog steeds wordt ondersteund.
Beveiliging & veiligheid
RISICO: MEDIUMHet lezen van een .cgi in een teksteditor is veilig - het wordt niet uitgevoerd door het te openen. Het risico zit in de UITVOERING op een server: CGI-scripts draaien met de privileges van de server en zijn historisch gezien een groot oppervlak voor webkwetsbaarheden (de Shellshock-bug uit 2014 werd grotendeels misbruikt via CGI-shellscripts; slecht geschreven CGI's maken commando-injectie, path traversal en willekeurige code-executie mogelijk). Implementeer nooit een gedownloade .cgi die u niet begrijpt, houd interpreters en de server up-to-date, beperk /cgi-bin/ permissies en geef de voorkeur aan FastCGI/app-server alternatieven voor nieuw werk. Behandel onbekende CGI-broncode als niet-vertrouwde code die moet worden gecontroleerd voor uitvoering.
Formaatdetails
in een notendop- EToys / niche app-data met .cgi - Een paar niet-gerelateerde applicaties hebben .cgi hergebruikt voor hun eigen databestanden; op een webserver is een .cgi bijna altijd een gateway-script.
Programma's die CGI-bestanden openen
Technische details
diepe specificaties| MIME-type | application/x-httpd-cgi |
| Alternatieve MIME-typen | text/plain, application/octet-stream |
| Bestandscodering | Platte tekst (ASCII/UTF-8) voor scripts; eigen binair formaat voor gecompileerde uitvoerbare bestanden |
| Bestandssignatuur | Geen vaste magic bytes - tekstscripts beginnen met een shebang-regel (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh, enz.); gecompileerde CGI-binaries bevatten de uitvoerbare header van het platform (ELF op Linux, MZ op Windows) |
| Executiemodel | Webserver start een nieuw OS-proces per HTTP-verzoek om het script of binair bestand uit te voeren; proces stopt nadat de respons is verzonden |
| Invoermechanisme | Verzoekgegevens geleverd via omgevingsvariabelen (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, HTTP_* headers); POST-body doorgegeven via stdin |
| Uitvoermechanisme | Script schrijft HTTP-responsheaders (Naam: waarde regels) gevolgd door een lege regel en de respons-body direct naar stdout |
| Vereiste implementatie | Bestand moet zich bevinden in een voor CGI geactiveerde map (conventioneel /cgi-bin/) met de uitvoerbare bit ingesteld; de webservergebruiker heeft lees- en uitvoerrechten nodig |
| Typische scripttalen | Perl, Python, Bash/shell, Ruby, C (gecompileerd naar een native binary) |
| Typische bestandsgrootte | 1 KB - 100 KB voor tekstscripts; groter voor gecompileerde binaries |
| Compressie | Geen binnen het bestand zelf; de HTTP-respons-body kan apart door het script of de server met gzip worden gecomprimeerd |
| Platformondersteuning | Linux, Unix, macOS, Windows - elk besturingssysteem dat een webserver met CGI-ondersteuning draait |
| Veelvoorkomende webservers | Apache HTTP Server, Nginx (via FastCGI wrapper), lighttpd, Microsoft IIS |
| Prestatiekenmerk | Traag bij grote schaal - elk verzoek start en vernietigt een nieuw proces; vervangen door FastCGI, WSGI en ASGI voor implementaties met veel verkeer |
| Beveiligingsoverweging | Scriptbroncode is leesbaar op de schijf; bescherm met strikte bestandspermissies en voorkom blootstelling van de CGI-map via een directe URL buiten het aangewezen /cgi-bin/ pad |
| Uitgebracht | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Laatste versie | CGI/1.1 (RFC 3875, October 2004) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | www.rfc-editor.org |
CGI conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over CGI-bestanden.