|  | Zagrożenia
Wywołanie strony będącej skryptem (programem) CGI powoduje uruchomienie
na serwerze odpowiedniego programu jako oddzielnego procesu.
Powoduje to powstanie wielu zagrożeń których należy unikać.
 
Program uruchamiany jest jako użytkownik apache, bądź
    nobody (zależnie od konfiguracji), dzięki czemu uzyskuje 
    on dostęp do wszystkich plików zapisanych przez tego użytkownika
    na serwerze (również do plików wykorzystywanych przez inne skrypty).
Program otrzymuje standardowe prawa użytkownika, czyli ma dostęp do takich 
    plików jak /etc/passwd, których upublicznienie poza 
    serwer jest zagrożeniem bezpieczeństwa
Użytkownik może w taki sposób napisać program, że powoduje on uruchomienie
    zdalnego terminala wyświetlanego na końcówce klienta. Zazwyczaj sposób
    ten omija firewall'e ponieważ połączenie TCP/IP jest inicjowane przez 
    serwer.
Użytkownik może nieświadomie (ale łatwo) napisać skrypt, który 
    zawiera błędy i umożliwia atak na serwer, bądź przynajmniej na
    konto na którym skrypt jest umieszczony.Przykładem może być program który jako parametr otrzymuje nazwę
    pliku (np. z pocztą) do wyświetlenia. Ale sprytne podanie nazwy
    pliku jako np. ../../../../../etc/passwd da dostęp do plików
    z poza katalogu poczty. Proszę rozważyć skrypt 
    zrodlo.cgi w którym
    pominięto by sprawdzanie czy plik ma jedno ze znanych rozszerzeń
    i na leży na bieżącej ścieżce.
 Szczególnie ostrożnie należy stosować polecenia typu eval,
    exec w bashu, czy system, execl w C lub perlu, 
    których parametry nie są stałe (np. zależą od QUERY_STRING).
Innym zagrożeniem może być atak typu DOS. Każde odwołanie
    do skryptu CGI powoduje uruchomienie procesu, więc masowo uruchamiając
    skrypt można przeciążyć system.
 
Przed pierwszym z wymienionych zagrożeń można częściowo zabezpieczyć się, 
korzystając z mechanizmu suexec. Gdy serwer jest skonfigurowany aby
korzystał z tego modułu, skrypt (program) uruchamiany jest z prawami 
właściciela pliku, a nie właściciela procesu serwera (apache).
W takim wypadku użytkownik może udostępnić do zapisu co najwyżej pliki
do których sam ma takie prawa. Nie zabezpiecza to jednak przed dostępem
do plików spoza własnego katalogu.
 
Często stosowanym "zabezpieczeniem" jest nieudostępniane możliwości 
wykonywania skryptów CGI zwykłym użytkownikom. Po sprawdzeniu 
administrator umieszcza takie skrypty w specjalnym katalogu.
 
Ważne informacje np. hasła można wydzielić ze skryptów i umieścić je w 
oddzielnym pliku poza ścieżką dostępną do normalnego odczytu przez 
serwer WWW (np. poza katalogiem public_html). 
Dzięki takiemu rozwiązaniu skrypt dalej może 
taki plik odczytywać (bo ma prawa użytkownika), ale w przypadku 
wyłączenia modułu CGI (np. w przypadku wadliwego upgrade'u oprogramowania)
plik z hasłami nie zostanie udostępniony do odczytu jako tekst, tak
jak się to może stać ze skryptami.
 Jan Słupski, jslupski@email.com
 |  |