CGI
Z Wikipedii
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
- Specyfikacja CGI/1.1
- Strona World Wide Web Consortium dotycząca CGI
- Przewodnik po CGI dla serwera Apache
| Medyka: ''Mrówki'' zgromadziły się przed Urzędem Miasta |
Około stu osób, tzw. mrówek, zebrało się przed Urzędem Miasta Przemyśla. Protestują przeciwko zmianom przepisów celnych, które pozwalają przenosić przez granicę tylko 40 sztuk papierosów. |
| Amnestia dla wszystkich, którzy unikali służby wojskowej |
Mężczyźni, którzy są zarejestrowani, lecz ukrywają się i ignorują wezwania - zostaną przeniesieni do rezerwy. Ci którzy ukrywali się przed rejestracją - teraz będą musieli najpierw się zarejestrować i dopiero wtedy zostaną przeniesieni do rezerwy - ogłosił dziś szef MON Bogdan Klich. |
| Gen. Sikorski nie został zastrzelony ani uduszony |
Prezes IPN Janusz Kurtyka potwierdził, że gen. Władysław Sikorski zginął w katastrofie lotniczej. - W trakcie badań nie stwierdzono śladów, które by wskazywały, że generał został postrzelony bądź uduszony. |
| Wałęsa i inni nobliści na spotkaniu z młodzieżą |
Były prezydent Lech Wałęsa uważa, że przyznanie mu 25 lat temu Pokojowej Nagrody Nobla było zachętą dla ruchu "Solidarność" do dalszego działania. Po konferencji prasowej prezydent, wraz z pozostałymi noblistami, weźmie udział w dyskusji z 600 młodymi ludźmi z całego kraju. |
| Kategoria A, życie z wyrokiem |
Paweł od trzech lata żyje jak zbieg z więzienia. Jedna litera w książeczce wojskowej i sprzeciw wobec obowiązkowej służby wojskowej zmieniły jego życie. Dzisiaj ma szansę na amnestię, jeśli ogłosi ją Ministerstwo Obrony Narodowej. |
| Wizyta prezydenta w Azji skrócona, odwołano przyjęcie |
Lech Kaczyński wróci do Polski wcześniej niż początkowo planowano. Polski prezydent miał wydać w sobotę przyjęcie w hotelu w Seulu. Jednak impreza została odwołana i w sobotę przed północą polska delegacja będzie już w kraju. |
| Sejm przeciw odwołaniu Komorowskiego |
Sejm odrzucił wniosek PiS-u o odwołanie Bronisława Komorowskiego z funkcji marszałka Sejmu. Komorowski powiedział chwilę potem, że choć Sejm nie poparł PiS-u, to wniosek, debata i głosowanie to dla niego cenne doświadczenie: - Nauczyło mnie to, że trzeba miarkować także to, co chce się wyrazić językiem ironii - stwierdził. - Dziękuję wszystkim - zakończył. |
| A co mnie jakiś barman na Cyprze obchodzi? |
Tymi słowami Jacek Kurski skomentował doniesienia Polaka, pracującego w hotelu na Cyprze, o pijanych dwóch posłach PiS, którzy zniszczyli hotelowe wózki golfowe. Kurski zapewnił też o swoim poparciu dla kolegów i porównał całą sprawę do swojego niedawnego drogowego wybryku, czyli "rzekomej afery, która podnieciła tabloidy". |
| Lądowanie z turbulencjami: Lech Kaczyński przybył do Seulu |
Prezydent RP Lech Kaczyński przybył około godz. 5.50 rano czasu polskiego do Seulu. Wizyta w Korei Południowej ma charakter oficjalny i kończy trwającą od niedzieli podróż prezydenta po Azji. |
| Marcinkiewicz na Platformie do Strasburga |
Były premier Kazimierz Marcinkiewicz na pierwszym miejscu warszawskiej listy PO do Parlamentu Europejskiego. Taki wariant rozważają liderzy partii - dowiedziała się „Gazeta” |

