CGI - Google

CGI

Z Wikipedii

Skocz do: nawigacji, szukaj
Ten artykuł dotyczy informatyki. Zobacz też: CGI w kinematografii.

CGI (ang. Common Gateway Interface) to znormalizowany interfejs, umożliwiający komunikację pomiędzy oprogramowaniem serwera WWW a innymi programami znajdującymi się na serwerze. Zazwyczaj program serwera WWW wysyła do przeglądarki statyczne dokumenty HTML. Za pomocą programów CGI można dynamicznie (na żądanie klienta) generować dokumenty HTML uzupełniając je np. treścią pobieraną z bazy danych.

Programy CGI są często pisane w językach interpretowalnych takich jak Perl, przez co nazywa się je także skryptami CGI.


Spis treści

[edytuj] Cechy CGI

  • Stabilny (bez zmian od 1995 roku) dostÄ™pny za darmo standard.
  • Implementacja CGI nie jest zależna od konkretnej platformy sprzÄ™towej/systemowej natomiast zależy od konkretnego programu serwera WWW. WiÄ™kszość popularnych serwerów ma zaimplementowany mechanizm CGI, włączajÄ…c w to serwery dziaÅ‚ajÄ…ce na systemach Unix (Apache, Sun Java System Web Server, NSCA), dziaÅ‚ajÄ…ce na platformie Microsoft Windows (Apache, Netscape, Microsoft IIS) oraz Macintosh (Apache, WebStar). Również wiele innych serwerów implementuje interfejs CGI.
  • Szeroki wachlarz możliwoÅ›ci zastosowania (patrz zastosowanie)
  • Programy CGI można pisać praktycznie w dowolnym jÄ™zyku programowania. CzÄ™sto wykorzystuje siÄ™ Perla, PHP, Ruby, Tcl, C, C++, Visual Basic i AppleScript. Dla wielu z tych jÄ™zyków stworzono biblioteki wspomagajÄ…ce obsÅ‚ugÄ™ CGI.
  • ObsÅ‚uga CGI wiąże siÄ™ zazwyczaj z tworzeniem nowego procesu na każde żądanie. Powoduje to duże obciążenie serwera, zwÅ‚aszcza dla jÄ™zyków interpretowanych. PowstaÅ‚y rozwiÄ…zania przyÅ›pieszajÄ…ce typu FastCGI lub automatyczne tworzenie tymczasowych wersji kompilowanych.

[edytuj] Zastosowanie programów/skryptów CGI

  • Dynamiczne generowanie dokumentów przed wysÅ‚aniem ich do przeglÄ…darki (np. z aktualnÄ… datÄ…)
  • Tworzenie dokumentów w oparciu o dane znajdujÄ…ce siÄ™ w bazie i formatowanie rekordów w celu wyÅ›wietlenie ich zawartoÅ›ci na stronie
  • Pobieranie i formatowanie danych bÄ™dÄ…cych wynikiem dziaÅ‚ania innego oprogramowania (np. dane pobierane z urzÄ…dzenia pomiarowego mogÄ… być na bieżąco wysyÅ‚ane do przeglÄ…darki)
  • Generowanie i przetwarzanie ankiet i kwestionariuszy
  • Tworzenie dynamicznych ilustracji - takich jak wykresy czy schematy

[edytuj] Bezpieczeństwo

Ponieważ programy CGI nie różnią się praktycznie niczym od pozostałych programów uruchamianych na serwerze są tak samo podatne na występowanie błędów i awarie. Ponieważ jednak w większości przypadków programy/skrypty CGI otrzymują oraz przetwarzają dane "z zewnątrz" bardzo ważne jest aby sprawdzić dokładnie ich poprawność. Nie ma żadnej gwarancji, że użytkownik strony wypełni wszystkie pola formularza zgodnie z przeznaczeniem, wyśle do serwera poprawne dane lub program/skrypt CGI nie stanie się przedmiotem ataku krakera. Z tych powodów zaleca się stosowanie pewnych reguł podczas pisania programów/skryptów CGI.

  • Należy zwracać szczególnÄ… uwagÄ™ na bezbłędność aplikacji
  • Wszystkie dane odbierane z zewnÄ…trz powinny być dokÅ‚adnie weryfikowane szczególnie pod kÄ…tem ich rozmiaru, zgodnoÅ›ci typu i zawartoÅ›ci
  • Programy/skrypty CGI powinny być uruchamiane z wzglÄ™dnie najniższymi uprawnieniami lub jeÅ›li to możliwe w odizolowanym Å›rodowisku chroot
  • Administrator serwera powinien mieć Å›cisłą kontrolÄ™ nad dostÄ™pnymi programami/skryptami CGI. Aby uÅ‚atwić to zadanie wiÄ™kszość serwerów umożliwia uruchamianie tylko tych programów, które znajdujÄ… siÄ™ w specjalnym katalogu (zazwyczaj cgi-bin w głównym katalogu serwera)

[edytuj] Wymiana danych między serwerem a programami CGI

Zgodnie ze specyfikacją CGI istnieją wyraźnie określone drogi wymiany danych między serwerem a skryptem CGI oraz w drugą stronę. Zgodnie ze specyfikacją dane mogą być dostępne dla skryptu CGI w dwóch postaciach: jako dane pojawiające się na standardowym wejściu programu lub w specjalnych zmiennych środowiskowych tworzonych przez serwer podczas uruchamiania programu CGI. Wyniki program/skrypt wysyła na standardowe wyjście a oprogramowanie serwera poddaje je dalszemu przetwarzaniu.

[edytuj] Zmienne środowiskowe

Zmienna Typ Opis
SERVER_SOFTWARE Zmienne tworzone dla wszystkich żądań Informacja o programie serwera, który uruchomił program CGI. Format: nazwa/wersja
np. Apache/1.3.37 (Unix)
SERVER_NAME Nazwa hosta, na którym działa serwer w postaci nazwy DNS, aliasu DNS lub adresu IP
GATEWAY_INTERFACE Wersja specyfikacji CGI zaimplementowanej przez program serwera. Format: CGI/wersja
np. CGI/1.1
SERVER_PROTOCOL Zmienne tworzone w zależności od konkretnego żądania Nazwa i wersja protokołu użytego podczas odbierania żądania od klienta. Format: protokół/wersja
np. HTTP/1.1
SERVER_PORT Numer portu, z którego nastąpiło żądanie. Zazwyczaj 80
REQUEST_METHOD Metoda, za pomocą której nastąpiło żądanie. Dla protokołu HTTP może być: "GET", "HEAD", "POST", ...
PATH_INFO Dodatkowe informacje na temat ścieżki do programu CGI
PATH_TRANSLATED Rzeczywista ścieżka dostępu do programu CGI
SCRIPT_NAME Nazwa wykonywanego programu/skryptu
QUERY_STRING Dane przekazane do programu CGI wraz z adresem URL po znaku "?"
REMOTE_HOST Nazwa, hosta z którego odebrano żądanie. Jeżeli nie można jej uzyskać serwer powinien ustawić zmienną REMOTE_ADDR a tą pozostawić niezainicjowaną
REMOTE_ADDR Adres IP hosta, z którego odebrano żądanie
AUTH_TYPE Zmienna używana podczas autoryzacji użytkowników przed dostępem do chronionych dokumentów na serwerze. Zależy od protokołu i konfiguracji serwera
REMOTE_USER Tak samo jak w przypadku zmiennej AUTH_TYPE
REMOTE_IDENT Nazwa zdalnego użytkownika. Rzadko używana ze względów bezpieczeństwa. Zobacz RFC 931
CONTENT_TYPE Jeżeli wysłano jakieś dane, zmienna przechowuje informację o typie tych danych.
CONTENT_LENGTH Rozmiar (w bajtach) danych przekazywanych do serwera za pomocÄ… metody POST
HTTP_ACCEPT Zmienne pobierane z nagłówka HTTP wysyłanego przez przeglądarkę Typy MIME akceptowane przez przeglądarkę klienta pobrane na podstawie nagłówka HTTP
HTTP_USER_AGENT Informacje dotyczÄ…ce przeglÄ…darki klienta. Format: oprogramowanie/wersja biblioteka/wersja


Oprócz zmiennych przedstawionych w tabeli w zależności od oprogramowania serwera mogą być tworzone inne zmienne środowiskowe. Więcej informacji na ich temat znajduje się w dokumentacji oprogramowania.

W ramce poniżej znajduje się przykładowy skrypt CGI napisany w Perlu, który wyświetla dostępne zmienne środowiskowe.

#!/usr/bin/perl

print "Content-type: text/html\n\n";

foreach $key (keys %ENV) 
{
    print "$key --> $ENV{$key}<br>";
}

[edytuj] Zobacz też

[edytuj] Linki zewnętrzne


Polska liderem w pokazywaniu europejskich produkcji
Europejskie stacje telewizyjne przeznaczają ponad 65 proc. czasu antenowego na produkcje europejskie, w tym ponad 36 proc. na produkcje niezależnych producentów z UE - wynika z piątkowego raportu Komisji Europejskiej. Polska jest liderem rankingu krajów UE.
TVP procesuje siÄ™ z "Dziennikiem"
Przeprosin i wpłaty 200 tys. na cel społeczny żąda TVP od "Dziennika" za artykuł pt. "Korupcja w TVP" - o domniemanej propozycji wiceszefowej Agencji Informacji TVP Patrycji Koteckiej wyższych wycen za materiały kompromitujące PO.
Maks Kolonko procesuje siÄ™ z "Faktem"
Przeprosin i 100 tysięcy zł zadośćuczynienia żąda od wydawcy "Faktu" znany prezenter TV Mariusz Maks Kolonko za nazwanie go "łajdakiem" i sugestię, że swój związek z Weroniką Rosati traktował instrumentalnie.
Powstaje audiobook o ÅšlÄ…sku
Sześć płyt i książka z esejami złożą się na audiobook poświęcony Śląskowi. Ma to być dźwiękowy pejzaż regionu.
Dodatek o Powstaniu Warszawskim w "Rzeczpospolitej"
Dzisiaj dziennik "Rzeczpospolita" (Presspublica) ukaże siÄ™ z dodatkiem poÅ›wiÄ™conym Powstaniu Warszawskiemu – "Warszawa '44".
Linki: Strona g³ówna