Vad är filformatet CGI?
Tillägget .cgi står för Common Gateway Interface - ett standardiserat sätt att generera webbapplikationer och dynamiskt innehåll på webbsidor. Tillägget .cgi, när det används på en webbserver, tillhandahåller ett gränssnitt mellan körbara program och webbservern som genererar webbplatsens innehåll. Alla sådana program kallas CGI:er eller CGI-skript.
Dessa filer är i allmänhet skrivna med ett skriptspråk som Perl, Python eller shell script, även om en .cgi-fil lika gärna kan vara en kompilerad binärfil (till exempel ett C-program). Själva filändelsen säger ingenting om språket inuti - shebang-raden längst upp i skriptet, såsom #!/usr/bin/perl eller #!/usr/bin/python3, talar om för webbservern vilken tolk som ska anropas.
Ett CGI-skript körs på servern en gång per inkommande HTTP-begäran. Det läser begäransdata från miljövariabler (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) och accepterar POST-data via stdin, och skriver sedan ett HTTP-svar - rubriker följt av innehåll - direkt till stdout. För att fungera måste filen placeras i en CGI-aktiverad katalog (traditionellt /cgi-bin/) och ha körrättigheter inställda på servern.
.cgi är en gränssnittsstandard, inte ett programmeringsspråk. Flera andra filformat delar filändelsen .cgi: .pl, .py eller .sh-skript döps ofta om till .cgi så att webbservern dirigerar dem genom CGI-mekanismen. Eftersom CGI skapar en ny process för varje begäran är det långsamt vid hög belastning, och det har till stor del ersatts av FastCGI, mod_php, WSGI och moderna applikationsservrar - även om det fortfarande stöds på de flesta webbservrar idag.
Säkerhet & trygghet
RISK: MEDIUMAtt läsa en .cgi i en textredigerare är säkert - den körs inte bara genom att öppnas. Risken ligger i EXEKVERING på en server: CGI-skript körs med serverns privilegier och har historiskt sett varit en stor yta för webbsårbarheter (Shellshock-buggen 2014 utnyttjades till stor del via CGI-skalskript; dåligt skrivna CGI:er möjliggör kommandoinjektion, sökvägsgenomgång och exekvering av godtycklig kod). Driftsätt aldrig en nedladdad .cgi som du inte förstår, håll tolkar och servern uppdaterade, begränsa rättigheterna för /cgi-bin/ och föredra FastCGI/app-server-alternativ för nya projekt. Behandla okänd CGI-källkod som otillförlitlig kod som bör granskas före körning.
Formatdetaljer
i ett nötskal- EToys / nischad appdata som använder .cgi - Ett fåtal orelaterade applikationer har återanvänt .cgi för sina egna datafiler; på en webbserver är en .cgi nästan alltid ett gateway-skript.
Program som öppnar CGI-filer
Tekniska detaljer
djup specifikation| MIME-typ | application/x-httpd-cgi |
| Alternativa MIME-typer | text/plain, application/octet-stream |
| Filkodning | Klartext (ASCII/UTF-8) för skript; nativ binär för kompilerade körbara filer |
| Filsignatur | Inga fasta magic bytes - textskript börjar med en shebang-rad (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh, etc.); kompilerade CGI-binärer har plattformens huvud för körbara filer (ELF på Linux, MZ på Windows) |
| Exekveringsmodell | Webbservern skapar en ny OS-process per HTTP-begäran för att köra skriptet eller binärfilen; processen avslutas efter att svaret har skickats |
| Inmatningsmekanism | Begäransdata levereras via miljövariabler (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, HTTP_*-rubriker); POST-data skickas via stdin |
| Utmatningsmekanism | Skriptet skriver HTTP-svarshuvuden (Namn: värde-rader) följt av en tom rad och själva innehållet direkt till stdout |
| Krav för driftsättning | Filen måste ligga i en CGI-aktiverad katalog (vanligtvis /cgi-bin/) med körrättigheter (executable bit) inställda; webbserverns användare behöver läs- och körrättigheter |
| Typiska skriptspråk | Perl, Python, Bash/shell, Ruby, C (kompilerad till en nativ binärfil) |
| Typisk filstorlek | 1 KB - 100 KB för textskript; större för kompilerade binärer |
| Komprimering | Ingen i själva filen; HTTP-svaret kan komprimeras med gzip separat av skriptet eller servern |
| Plattformsstöd | Linux, Unix, macOS, Windows - alla operativsystem som kör en CGI-kompatibel webbserver |
| Vanliga webbservrar | Apache HTTP Server, Nginx (via FastCGI-wrapper), lighttpd, Microsoft IIS |
| Prestandaegenskaper | Långsamt vid hög belastning - varje begäran skapar och förstör en ny process; ersatt av FastCGI, WSGI och ASGI för högpresterande miljöer |
| Säkerhetsöverväganden | Skriptets källkod är läsbar på disken; skydda med strikta filrättigheter och undvik att exponera CGI-katalogen via en direkt URL utanför den angivna /cgi-bin/-sökvägen |
| Släppt | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Senaste version | CGI/1.1 (RFC 3875, October 2004) |
| Öppen standard | Ja · royaltyfri |
| Specifikation | www.rfc-editor.org |
CGI-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om CGI-filer.