Co to jest format pliku CGI?
Rozszerzenie .cgi oznacza Common Gateway Interface - standardowe podejście do generowania aplikacji internetowych i dynamicznej zawartości na stronach WWW. Rozszerzenie .cgi, gdy jest stosowane na serwerze WWW, zapewnia interfejs między programami wykonywalnymi a serwerem WWW, który generuje zawartość witryny. Wszystkie takie programy nazywane są skryptami CGI.
Pliki te są zazwyczaj pisane przy użyciu języka skryptowego, takiego jak Perl, Python lub shell script, choć plik .cgi może być również skompilowanym plikiem binarnym (na przykład programem w C). Samo rozszerzenie nie mówi nic o języku znajdującym się wewnątrz - linia shebang na samej górze skryptu, taka jak #!/usr/bin/perl lub #!/usr/bin/python3, informuje serwer WWW, który interpreter należy wywołać.
Skrypt CGI uruchamia się na serwerze raz dla każdego przychodzącego żądania HTTP. Odczytuje dane żądania ze zmiennych środowiskowych (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) i akceptuje dane treści POST przez stdin, a następnie zapisuje odpowiedź HTTP - nagłówki, a po nich treść - bezpośrednio do stdout. Aby działać, plik musi znajdować się w katalogu z obsługą CGI (tradycyjnie /cgi-bin/) i mieć ustawione uprawnienia do wykonywania na serwerze.
.cgi to standard interfejsu, a nie język programowania. Kilka innych formatów plików współdzieli rozszerzenie .cgi: skrypty .pl, .py lub .sh są często zmieniane na .cgi, aby serwer WWW kierował je przez mechanizm CGI. Ponieważ CGI tworzy nowy proces dla każdego żądania, jest wolny przy dużej skali i został w dużej mierze zastąpiony przez FastCGI, mod_php, WSGI oraz nowoczesne serwery aplikacji - choć do dziś pozostaje obsługiwany przez większość serwerów WWW.
Bezpieczeństwo
RYZYKO: MEDIUMCzytanie pliku .cgi w edytorze tekstu jest bezpieczne - nie zostanie on uruchomiony przez samo otwarcie. Ryzyko wiąże się z WYKONANIEM na serwerze: skrypty CGI działają z uprawnieniami serwera i historycznie stanowią dużą powierzchnię podatności (błąd Shellshock z 2014 roku był wykorzystywany głównie przez skrypty powłoki CGI; źle napisane CGI umożliwiają wstrzykiwanie poleceń, path traversal i wykonywanie dowolnego kodu). Nigdy nie wdrażaj pobranego pliku .cgi, którego nie rozumiesz, dbaj o aktualizacje interpreterów i serwera, ogranicz uprawnienia do /cgi-bin/ i preferuj alternatywy takie jak FastCGI/serwery aplikacji w nowych projektach. Traktuj nieznane źródło CGI jako niezaufany kod wymagający przeglądu przed uruchomieniem.
Szczegóły formatu
w pigułce- EToys / niszowe dane aplikacji używające .cgi - Kilka niepowiązanych aplikacji użyło rozszerzenia .cgi dla własnych plików danych; na serwerze WWW .cgi to prawie zawsze skrypt gateway.
Programy otwierające pliki CGI
Szczegóły techniczne
specyfikacja| Typ MIME | application/x-httpd-cgi |
| Alternatywne typy MIME | text/plain, application/octet-stream |
| Kodowanie pliku | Zwykły tekst (ASCII/UTF-8) dla skryptów; natywny plik binarny dla skompilowanych plików wykonywalnych |
| Sygnatura pliku | Brak stałych magicznych bajtów - skrypty tekstowe zaczynają się od linii shebang (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh itp.); skompilowane pliki binarne CGI posiadają nagłówek wykonywalny platformy (ELF na Linux, MZ na Windows) |
| Model wykonywania | Serwer WWW tworzy nowy proces systemu operacyjnego dla każdego żądania HTTP w celu uruchomienia skryptu lub pliku binarnego; proces kończy się po wysłaniu odpowiedzi |
| Mechanizm wejściowy | Dane żądania dostarczane przez zmienne środowiskowe (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, nagłówki HTTP_*); treść POST przekazywana przez stdin |
| Mechanizm wyjściowy | Skrypt zapisuje nagłówki odpowiedzi HTTP (linie Nazwa: wartość), po których następuje pusta linia i treść odpowiedzi bezpośrednio do stdout |
| Wymagane wdrożenie | Plik musi znajdować się w katalogu z obsługą CGI (zwyczajowo /cgi-bin/) z ustawionym bitem wykonywalności; użytkownik serwera WWW potrzebuje uprawnień do odczytu i wykonywania |
| Typowe języki skryptowe | Perl, Python, Bash/shell, Ruby, C (skompilowany do natywnego pliku binarnego) |
| Typowy rozmiar pliku | 1 KB - 100 KB dla skryptów tekstowych; większy dla skompilowanych plików binarnych |
| Kompresja | Brak w samym pliku; treść odpowiedzi HTTP może być kompresowana gzip oddzielnie przez skrypt lub serwer |
| Obsługa platform | Linux, Unix, macOS, Windows - dowolny system operacyjny z serwerem WWW obsługującym CGI |
| Popularne serwery WWW | Apache HTTP Server, Nginx (przez wrapper FastCGI), lighttpd, Microsoft IIS |
| Charakterystyka wydajności | Niska przy dużej skali - każde żądanie tworzy i niszczy nowy proces; zastąpione przez FastCGI, WSGI i ASGI w przypadku wdrożeń o dużym natężeniu ruchu |
| Kwestie bezpieczeństwa | Źródło skryptu jest czytelne na dysku; należy je chronić rygorystycznymi uprawnieniami do plików i unikać udostępniania katalogu CGI przez bezpośredni adres URL poza wyznaczoną ścieżką /cgi-bin/ |
| Wydano | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Najnowsza wersja | CGI/1.1 (RFC 3875, October 2004) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | www.rfc-editor.org |
Konwersje CGI
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki CGI.