Hva er CGI-filformatet?
Filendelsen .cgi står for Common Gateway Interface - en standardmetode for å generere webapplikasjoner og dynamisk innhold på nettsider. Når .cgi-filendelsen brukes på en webserver, fungerer den som et grensesnitt mellom kjørbare programmer og webserveren som genererer nettstedets innhold. Alle slike programmer kalles CGI-er eller CGI-skript.
Disse filene er vanligvis skrevet i et skriptspråk som Perl, Python eller shell-skript, selv om en .cgi-fil like gjerne kan være en kompilert binærfil (for eksempel et C-program). Selve filendelsen sier ingenting om språket inni - «shebang»-linjen helt øverst i skriptet, som #!/usr/bin/perl eller #!/usr/bin/python3, forteller webserveren hvilken tolk (interpreter) som skal kalles.
Et CGI-skript kjører på serveren én gang per innkommende HTTP-forespørsel. Det leser forespørselsdata fra miljøvariabler (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) og godtar POST-data via stdin, for så å skrive et HTTP-svar - headere etterfulgt av innhold - direkte til stdout. For å fungere må filen plasseres i en CGI-aktivert mappe (tradisjonelt /cgi-bin/) og ha kjøretillatelse satt på serveren.
.cgi er en grensesnittstandard, ikke et programmeringsspråk. Flere andre filformater deler .cgi-endelsen: .pl, .py eller .sh-skript blir ofte omdøpt til .cgi slik at webserveren ruter dem gjennom CGI-mekanismen. Fordi CGI starter en ny prosess for hver forespørsel, er det tregt ved stor trafikk, og det har i stor grad blitt erstattet av FastCGI, mod_php, WSGI og moderne applikasjonsservere - selv om det fortsatt støttes på de fleste webservere i dag.
Sikkerhet og trygghet
RISIKO: MEDIUMÅ lese en .cgi i en tekstredigerer er trygt - den kjører ikke ved å bli åpnet. Risikoen ligger i UTFØRELSE på en server: CGI-skript kjører med serverens privilegier og har historisk sett vært en stor kilde til sårbarheter (Shellshock-feilen i 2014 ble i stor grad utnyttet via CGI-shellskript; dårlig skrevne CGI-er muliggjør kommandoinjeksjon, «path traversal» og kjøring av vilkårlig kode). Distribuer aldri en nedlastet .cgi du ikke forstår, hold tolker og serveren oppdatert, begrens tillatelser i /cgi-bin/, og foretrekk FastCGI/app-server-alternativer for nytt arbeid. Behandle ukjent CGI-kildekode som upålitelig kode som må gjennomgås før kjøring.
Formatdetaljer
i et nøtteskall- EToys / nisje-appdata som bruker .cgi - Noen få urelaterte applikasjoner har gjenbrukt .cgi for sine egne datafiler; på en webserver er en .cgi nesten alltid et gateway-skript.
Programmer som åpner CGI-filer
Tekniske detaljer
dyp spesifikasjon| MIME-type | application/x-httpd-cgi |
| Alternative MIME-typer | text/plain, application/octet-stream |
| Filkoding | Ren tekst (ASCII/UTF-8) for skript; nativ binær for kompilerte kjørbare filer |
| Filsignatur | Ingen faste «magic bytes» - tekstskript starter med en shebang-linje (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh, osv.); kompilerte CGI-binærfiler har plattformens kjørbare header (ELF på Linux, MZ på Windows) |
| Kjøringsmodell | Webserveren forker en ny OS-prosess per HTTP-forespørsel for å kjøre skriptet eller binærfilen; prosessen avsluttes etter at svaret er sendt |
| Inndatamekanisme | Forespørselsdata leveres via miljøvariabler (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, HTTP_*-headere); POST-body sendes via stdin |
| Utndatamekanisme | Skriptet skriver HTTP-svarheadere (Navn: verdi-linjer) etterfulgt av en tom linje og svarinnholdet direkte til stdout |
| Påkrevd distribusjon | Filen må ligge i en CGI-aktivert mappe (vanligvis /cgi-bin/) med kjøretillatelse satt; webserver-brukeren trenger lese- og kjøretilgang |
| Typiske skriptspråk | Perl, Python, Bash/shell, Ruby, C (kompilert til en nativ binærfil) |
| Typisk filstørrelse | 1 KB - 100 KB for tekstskript; større for kompilerte binærfiler |
| Komprimering | Ingen i selve filen; HTTP-svarinnholdet kan være gzip-komprimert separat av skriptet eller serveren |
| Plattformstøtte | Linux, Unix, macOS, Windows - alle operativsystemer som kjører en CGI-kapabel webserver |
| Vanlige webservere | Apache HTTP Server, Nginx (via FastCGI-wrapper), lighttpd, Microsoft IIS |
| Ytelseskarakteristikk | Treg ved stor skala - hver forespørsel starter og avslutter en ny prosess; erstattet av FastCGI, WSGI og ASGI for installasjoner med høy trafikk |
| Sikkerhetshensyn | Skriptkilden er lesbar på disk; beskytt med strenge filtillatelser og unngå å eksponere CGI-mappen via en direkte URL utenfor den angitte /cgi-bin/-stien |
| Utgitt | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Siste versjon | CGI/1.1 (RFC 3875, October 2004) |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | www.rfc-editor.org |
CGI-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om CGI-filer.