Hvad er CGI-filformatet?
Filendelsen .cgi står for Common Gateway Interface - en standardmetode til at generere webapplikationer og dynamisk indhold på websider. Når .cgi-filendelsen anvendes på en webserver, fungerer den som en grænseflade mellem eksekverbare programmer og den webserver, der genererer hjemmesidens indhold. Alle sådanne programmer kaldes CGI'er eller CGI-scripts.
Disse filer er generelt skrevet i et scriptsprog som Perl, Python eller shell script, selvom en .cgi-fil ligeså vel kan være en kompileret binær fil (for eksempel et C-program). Selve filendelsen siger intet om sproget indeni - shebang-linjen helt øverst i scriptet, såsom #!/usr/bin/perl eller #!/usr/bin/python3, fortæller webserveren, hvilken fortolker der skal kaldes.
Et CGI-script kører på serveren én gang per indgående HTTP-anmodning. Det læser anmodningsdata fra miljøvariabler (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) og accepterer POST-indhold via stdin, hvorefter det skriver et HTTP-svar - headere efterfulgt af selve indholdet - direkte til stdout. For at fungere skal filen placeres i en CGI-aktiveret mappe (traditionelt /cgi-bin/) og have eksekveringsrettigheder indstillet på serveren.
.cgi er en grænsefladestandard, ikke et programmeringssprog. Flere andre filformater deler .cgi-filendelsen: .pl, .py eller .sh-scripts omdøbes ofte til .cgi, så webserveren sender dem gennem CGI-mekanismen. Da CGI starter en ny proces for hver anmodning, er det langsomt ved stor belastning, og det er i vid udstrækning blevet erstattet af FastCGI, mod_php, WSGI og moderne applikationsservere - selvom det stadig understøttes på de fleste webservere i dag.
Sikkerhed og tryghed
RISIKO: MEDIUMDet er sikkert at læse en .cgi i en teksteditor - den kører ikke blot ved at blive åbnet. Risikoen ligger i EKSEKVERING på en server: CGI-scripts kører med serverens privilegier og har historisk set været en stor flade for websårbarheder (Shellshock-fejlen fra 2014 blev i høj grad udnyttet via CGI-shell-scripts; dårligt skrevne CGI'er muliggør kommando-injektion, path traversal og eksekvering af vilkårlig kode). Implementer aldrig en downloadet .cgi, som du ikke forstår, hold fortolkere og serveren opdateret, begræns rettighederne til /cgi-bin/, og foretræk FastCGI/app-server-alternativer til nyt arbejde. Behandl ukendt CGI-kildekode som upålidelig kode, der skal gennemgås før kørsel.
Formatdetaljer
kort fortalt- EToys / niche-app-data der bruger .cgi - Enkelte urelaterede applikationer har genbrugt .cgi til deres egne datafiler; på en webserver er en .cgi næsten altid et gateway-script.
Programmer der åbner CGI-filer
Tekniske detaljer
dyb specifikation| MIME-type | application/x-httpd-cgi |
| Alternative MIME-typer | text/plain, application/octet-stream |
| Filkodning | Almindelig tekst (ASCII/UTF-8) for scripts; indfødt binær for kompilerede eksekverbare filer |
| Filsignatur | Ingen faste magic bytes - tekstscripts starter med en shebang-linje (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh, osv.); kompilerede CGI-binærfiler bærer platformens eksekverbare header (ELF på Linux, MZ på Windows) |
| Eksekveringsmodel | Webserveren forker en ny OS-proces per HTTP-anmodning for at køre scriptet eller den binære fil; processen afsluttes, når svaret er sendt |
| Input-mekanisme | Anmodningsdata leveres via miljøvariabler (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, HTTP_*-headere); POST-indhold sendes via stdin |
| Output-mekanisme | Scriptet skriver HTTP-svarheadere (Navn: værdi-linjer) efterfulgt af en blank linje og selve svaret direkte til stdout |
| Påkrævet implementering | Filen skal ligge i en CGI-aktiveret mappe (konventionelt /cgi-bin/) med eksekverings-bit sat; webserver-brugeren skal have læse- og eksekveringsrettigheder |
| Typiske scriptsprog | Perl, Python, Bash/shell, Ruby, C (kompileret til en indfødt binær fil) |
| Typisk filstørrelse | 1 KB - 100 KB for tekstscripts; større for kompilerede binærfiler |
| Komprimering | Ingen i selve filen; HTTP-svaret kan være gzip-komprimeret separat af scriptet eller serveren |
| Platformunderstøttelse | Linux, Unix, macOS, Windows - ethvert OS, der kører en CGI-kompatibel webserver |
| Almindelige webservere | Apache HTTP Server, Nginx (via FastCGI-wrapper), lighttpd, Microsoft IIS |
| Ydeevne | Langsom ved skalering - hver anmodning opretter og nedlægger en ny proces; erstattet af FastCGI, WSGI og ASGI til implementeringer med høj trafik |
| Sikkerhedsovervejelser | Scriptets kildekode er læsbar på disken; beskyt med strenge filrettigheder og undgå at eksponere CGI-mappen via en direkte URL uden for den angivne /cgi-bin/-sti |
| Udgivet | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Seneste version | CGI/1.1 (RFC 3875, October 2004) |
| Åben standard | Ja · royaltyfri |
| Specifikation | www.rfc-editor.org |
CGI-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om CGI-filer.