Usługa WWW
Usługa WWWPrzedmiot Internet i jego zastosowanie
Dr inż Stanisław Polak
Wyższa Szkoła Zarządzania i Bankowości w Krakowie
httpartemiswszibedupl~polak
Dr inż Stanisław Polak 1 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Usługa WWW
Plan prezentacji
Poprawność serwisoacutew WWW
Protokoacuteł HTTP
Serwer bdquoApacherdquo
CGI
FastCGI
Dr inż Stanisław Polak 2 Przedmiot Internet i jego zastosowanie
Usługa WWW
Usługa bdquoGopherrdquoPoprzednik usługi WWW
Rysunek Charakterystyczne hierarchiczne menu gophera
I httpquuxorg70mdash strona gopher dostępna za pomocą usługiWWW
Dr inż Stanisław Polak 3 Przedmiot Internet i jego zastosowanie
Usługa WWW
Usługa bdquoHyper-GrdquoNastępca usługi WWW
(a) Przykładowy dokumentHyper-G
(b) Przykład wyszukiwania wHyper-G
(c) Troacutejwymiarowa strukturakolekcji dokumentoacutew Hyper-G
Rysunek Przeglądarka Harmony
I httpwwwhyperwavecommdash strona komercyjnego następcy serwerabdquoHyper-Grdquo
Dr inż Stanisław Polak 4 Przedmiot Internet i jego zastosowanie
Poprawność serwisoacutew WWW Usługa WWW
Ogoacutelne zasady tworzenia poprawnych stron WWW
I Formatowanie 6isin informacjaI Najprostsze środki
I HTML + CSSI HTML + CSS + JavaScript
1 lt DOCTYPE htmlgt2 lthtml lang=plgt3 ltheadgt4 ltmeta charset=utf -8gt5 lttitlegtWitaj Świecielttitlegt6 ltlink rel=stylesheet href=maincssgt7 ltheadgt8 ltbodygt9 ltmaingt
10 lth1gtWitaj Świecielth1gt11 ltspan class=namegtSPltspangt tutaj by ł 12 lt maingt13 ltf o o t e rgtStanis ł aw Polaklt f o o t e rgt14 ltbodygt15 lthtmlgt
HTML
1 main footer 2 display block 3 background gray 4 padding 10px 5 margin 1px 6 7 name fontminusfamily arial verdana sansminusserif
maincss
Dr inż Stanisław Polak 5 Przedmiot Internet i jego zastosowanie
Poprawność serwisoacutew WWW Usługa WWW
Funkcjonalność stron
Test KrugaI Co to jest za witryna mdash
identyfikator witryny nazwa logoslogan
I Na jakiej jestem podstronie mdashnazwa podstrony
I Jakie są głoacutewne kategorie mdashnawigacja globalna
I Jakie mam opcje do wyboru natym poziomie struktury mdashnawigacja lokalna
I Gdzie znajduję się w odniesieniudo całej struktury mdash bdquoTu jesteśrdquościeżka dostępu
I W jaki sposoacuteb mogę czegośposzukać mdash Wyszukiwarka
Dr inż Stanisław Polak 6 Przedmiot Internet i jego zastosowanie
Poprawność serwisoacutew WWW Usługa WWW
Poprawność stron WWW
TestowanieI PrzeglądarkiI OgraniczeniaI httpvalidatorw3org
Dr inż Stanisław Polak 7 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Model usługi WWW
Serwer WWW
Adres IP
ProtokoacutełPort
Przeglądarka WWW
Dr inż Stanisław Polak 8 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Żądanie klienta
Serwer WWW
80
Przeglądarka WWW
1 GET dokument html HTTP 1 12 Host www icsr agh edu pl3 AcceptminusLanguage pl q=10 en q=054 Accept texthtml q=10 textlowast q=08 image g i f q=06 image j p eg q=06 lowastlowast q
=015 AcceptminusEncoding bzip2 q=1 gzip q=08 zip q=056 AcceptminusCharset utfminus8q=10 isominus8859minus2q=087 UserminusAgent Mozilla 8
Adres strony httpwwwicsraghedupldokumenthtml
Dr inż Stanisław Polak 9 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Odpowiedź serwera
Serwer WWW
80
Przeglądarka WWW
1 HTTP 1 1 200 OK2 Date Thu 20 Dec 2001 1 2 0 4 3 0 GMT3 Serwer Apache 2 2 84 LastminusModified Thu 20 Dec 2001 0 0 0 4 3 0 GMT5 Etag 12345 -678 -900ab6 CacheminusControl maxminusage=6048007 Expires Fri 21 Dec 2001 0 0 0 0 0 0 GMT8 Contentminustype texthtml charset=utfminus89 Contentminuslength
1011 lthtmlgt12 13 lthtmlgt
Dr inż Stanisław Polak 10 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Protokoacuteł HTTP Usługa WWW
Komendy protokołu HTTP
I GETI HEADI POSTI OPTIONSI TRACEI DELETEI PUTI CONNECT
1 GET index html HTTP 1 0
Żądanie
1 HTTP 1 1 200 OK2 Date Mon 09 Aug 2002 1 7 0 2 0 8 GMT3 Server Apache 2 0 3 3 ( UNIX )4 ContentminusLength 17765 ContentminusType texthtml charset=ISOminus8859minus167 lt DOCTYPE HTML PUBLIC -IETFDTD HTML 20ENgt8 lthtmlgt9
10 lthtmlgt
Odpowiedź
Dr inż Stanisław Polak 11 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Protokoacuteł HTTP2Najważniejsze nowości
I Jedno połączenieI MultipleksacjaI Powiadomienia bdquoPushrdquoI PriorytetyzacjaI BinarnośćI Kompresja nagłoacutewkoacutew
Źroacutedło httpsblogcloudflarecomintroducing-http2
Dr inż Stanisław Polak 12 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Moduły
Repozytorium modułoacutew dla ApachersquoaI httpmodulesapacheorg
I Zawiera ponad 500 modułoacutew
Statyczne
MPM So CGI SSL Rdzeń serwera
httpd
Dynamiczne
So
Rdzeń serwera
httpd
LoadModule cgi module modulesmod cgiso
LoadModule ssl module modulesmod sslso
Moduły
MPM CGI SSL
Moduły dynamicznie ładowane (DSO)
Dr inż Stanisław Polak 13 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Wyboacuter modułu MPM
I UNIXI preforkI workerI event
I WindowsI mpm winnt
I OS2I mpmt os2
I NetwareI mpm netware
I BeOSI beos
Dr inż Stanisław Polak 14 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Ważniejsze katalogi i pliki serwera WWW
I binI apachectl (start stop restart graceful graceful-stop)I abI apxsI htpasswd
I logsI access logI error log
I confI cgi-binI htdocs
Dr inż Stanisław Polak 15 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Konfigurowanie serwera
Pliki konfiguracyjneI confhttpdconfI confextrahttpd-conf
Ważniejsze parametry
1 ServerRoot usrlocalapache22 DocumentRoot usrlocalapache2htdocs3 UserDir public_html4 UserDir disabled root5 Listen 806 User apache7 Group apache8 DirectoryIndex index html index html var index shtml index cgi index php
Dr inż Stanisław Polak 16 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie dostępem do zasoboacutew WWWModuły
1 Kontrola dostępuI mod authz host
2 UwierzytelnianieI Typ uwierzytelniania
I mod auth basicI mod auth digest
I Dostawca uwierzytelnianaI mod authn anonI mod authn dbdI mod authn dbmI mod authn fileI mod authnz ldapI
3 AutoryzacjaI mod authnz ldapI mod authz dbdI mod authz dbmI mod authz groupfileI mod authz ownerI mod authz user
Dr inż Stanisław Polak 17 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Kontrola dostępuPrzykłady
1 ltLocation gt2 Require host luke icsr agh edu pl3 ltLocationgt
1 ltLocation gt2 ltRequireAllgt3 Require all granted4 Require not ip 1 9 2 1 6 8 1 15 ltRequireAllgt6 ltLocationgt
1 ltLocation http11onlygt2 ltIf SERVER_PROTOCOL == rsquoHTTP 10rsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 18 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie i autoryzacja użytkownikaPrzykład bdquostrona httpwwwprzykladpl~polaktajny na hasłordquo
1 ltDirectory homelowast pub l i c h tm lgt2 3 AllowOverride AuthConfig4 5 ltD i r e c t o r ygt
confextrahttpd-userdirconf
Zmiana lub ustawienie hasła binhtpasswd
1 AuthType Basic2 AuthName Strona na haslo3 AuthBasicProvider file4 AuthUserFile homepolakpublic_htmltajny htpasswd5 Require user polak6 R e q u i r e v a l i dminusu s e r
˜polakpublic htmltajnyhtaccess
Dr inż Stanisław Polak 19 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie łączonePrzykład
1 ltLocation registeredminususersminusonlygt2 AuthType Basic3 AuthName Strona na hasło4 AuthBasicProvider file5 AuthUserFile usrlocalapache2passwdpasswords6 ltRequireAllgt7 Require user polak8 Require ip 1 9 2 1 6 8 1 1 1 9 2 1 6 8 1 29 ltRequireAllgt
10 ltLocationgt
Dr inż Stanisław Polak 20 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Uzgadnianie zawartości
I MultiViewsI Options +MultiViewsI Options All +MultiViews
I Mapa typoacutew mdash pliki var
1 URI document html en2 Content-Type texthtml qs=1 level=23 Content-Language en4 5 Description Strona po angielsku67 URI document html pl8 Content-Type texthtml qs=019 Content-Language pl
10 11 Description Strona po polsku
Przykładowy plik z mapą typoacutew
Dr inż Stanisław Polak 21 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Server Side Includes (SSI)
1 ltminusminuspolecenie atrybut=warto ś ć atrybut=warto ś ć minusminusgt
Składnia dyrektywy SSI
1 2 Options +Includes3 Opt ions +IncludesNOEXEC4 5 AddType texthtml shtml6 AddOutputFilter INCLUDES shtml7 XBitHack on Po wykonaniu chmod +x dokumenthtml dokumenty HTML staną si ę
dokumentami SSI
Plik rsquoconfhttpdconfrsquo lub rsquohtaccessrsquo
Dr inż Stanisław Polak 22 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest ltminusminusecho var=DATE_LOCAL
minusminusgt7 ltbodygt8 lthtmlgt
Wejściowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest 30minus10minus017 ltbodygt8 lthtmlgt
Wyjściowy dokument HTML
Dr inż Stanisław Polak 23 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe zmienne SSI
I DOCUMENT NAMEI DATE LOCALI LAST MODIFIED
Dr inż Stanisław Polak 24 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Polecenia SSI
I configI echoI includeI execI fsizeI flastmodI setI printenvI if elif else endif
Dr inż Stanisław Polak 25 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie robotami
1 Plik robotstxtI User-AgentI Disallow
2 HTMLI META
rsquoRobotsrsquo
3 Kontrola dostępu
1 Userminusagent lowast2 Disallow
1 lthtmlgt2 ltheadgt3 lttitlegt lttitlegt4 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt5 ltminusminus6 ltMETA NAME=ROBOTS CONTENT=NOINDEX FOLLOWgt7 ltMETA NAME=ROBOTS CONTENT=INDEX NOFOLLOWgt8 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt9 minusminusgt
10 ltheadgt11
1 ltLocation notminusindexablegt2 ltIf tolower ( HTTP_USER_AGENT ) =~ robot ||
REMOTE_HOST == rsquobadrobotcomrsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 26 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Informacje dla robotoacutew
1 ltmeta name=Autor content=Stanisław Polakgt2 ltmeta name=Description content=Strona domowa Stanisława Polakagt3 ltmeta name=Keywords content=XML Java PHP ontologiagt
Dr inż Stanisław Polak 27 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
SSL a serwer Apache
I SSL mdash protokoacuteł zaszyfrowanej komunikacjiI Szyfrowanie z kluczem publicznymI Szyfrowanie przesyłanych informacjiI Uwierzytelnianie serwera
Dr inż Stanisław Polak 28 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Podstawowa konfiguracja protokołu SSL
I configure ndashenable-ssl
1 Listen 4432 SSLEngine on3 SSLCertificateKeyFile usrlocalapache2confserver key4 SSLCertificateFile usrlocalapache2confserver crt5 6 ltDirectory usrlocalapache2htdocsbezpiecznygt7 SSLRequireSSL8 ltDirectorygt
confextrahttpd-sslconf
Dr inż Stanisław Polak 29 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Instalacja klucza prywatnego oraz tymczasowego certyfikatu
1 utwoacuterz zaszyfrowany w standardzie DES3 klucz prywatny2 openssl genrsa -des3 1024 gt usrlocalapache2confserverkey3 utwoacuterz niezaszyfrowany klucz prywatny4 openssl genrsa 1024 gt usrlocalapache2confserverkey5 chmod 400 usrlocalapache2confserverkey6 utwoacuterz ż ądanie po ś wiadczonego certyfikatu7 openssl req -new -key usrlocalapache2confserverkey -out tmpservercsr8 9 Country Name (2 letter code ) [ AU ] PL
10 State or Province Name ( full name ) [ SomeminusState ] malopolskie11 Locality Name ( eg city ) [ ] Krakow12 Organization Name ( eg company ) [ Internet Widgits Pty Ltd ] Akademia Gorniczo-Hutnicza13 Organizational Unit Name ( eg section ) [ ] EAIiE Katedra Informatyki14 Common Name ( eg YOUR name ) [ ] wwwicsraghedupl15 Email Address [ ] webmastericsraghedupl16 1718 utwoacuterz tymczasowy certyfikat podpisuj ąc go przez samego siebie19 openssl req -x509 -key usrlocalapache2confserverkey -in tmpservercsr -out usrlocalapache2confservercrt -days 36520 rm tmpserver csr
1 openssl s_client minusconnect localhost 4 4 3 minusstate2 GET HTTP 1 03 ltklawisz Entergt4 ltklawisz Entergt
Testowanie połączenia
Dr inż Stanisław Polak 30 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Bezpieczeństwo serwera WWWI Uprawnienia użytkownikaI Prawa dostępu do plikoacutewI Dostęp do katalogoacutew nadrzędnychI Skrypty CGII DziennikiI Identyfikacja serweraI Firewall aplikacyjny bdquoModSecurityrdquo mdash moduł
bdquomod security2rdquoI Przykład metody włamaniahttp[target]indexphpmosConfig_absolute_path=http[attacker]cmdphp
I Strona głoacutewna mdashhttpwwwmodsecurityorg
I RegułyI httpwwwmodsecurityorgprojectscommercialrulesmdash komercyjne firmybdquoTrustwave SpiderLabs
I httpwwwatomicorpcomchannelsasl-20rulesmdash komercyjne firmybdquoAtomicorprdquo
I httpsgithubcomSpiderLabsowasp-modsecurity-crsmdash darmowe
I httpupdatesatomicorpcomchannelsrulesdelayedmdash darmowe
I Graficzny edytor reguł mdashhttpremonetneacom
1 chown minusR root usrlocalapache2
2 chmod minusR u+w usrlocalapache2
3 chmod gominusrx usrlocalapache2logs
4 chmod gominusrx usrlocalapache2conf
1 ltDirectory gt2 Options FollowSymLinks3 AllowOverride None4 Require all denied5 ltDirectorygt
confhttpdconf
1 ltDirectory homelowastpub l i c h tm lgt
2 Opt ions ExecCGI3 4 ltD i r e c t o r ygt
1 ServerTokens Prod2 ServerSignature Off
confextrahttpd-defaultconfDr inż Stanisław Polak 31 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Firewall aplikacyjny bdquoModSecurityrdquoFazy przetwarzania
Dr inż Stanisław Polak 32 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Poprawność serwisoacutew WWW Usługa WWW
Ogoacutelne zasady tworzenia poprawnych stron WWW
I Formatowanie 6isin informacjaI Najprostsze środki
I HTML + CSSI HTML + CSS + JavaScript
1 lt DOCTYPE htmlgt2 lthtml lang=plgt3 ltheadgt4 ltmeta charset=utf -8gt5 lttitlegtWitaj Świecielttitlegt6 ltlink rel=stylesheet href=maincssgt7 ltheadgt8 ltbodygt9 ltmaingt
10 lth1gtWitaj Świecielth1gt11 ltspan class=namegtSPltspangt tutaj by ł 12 lt maingt13 ltf o o t e rgtStanis ł aw Polaklt f o o t e rgt14 ltbodygt15 lthtmlgt
HTML
1 main footer 2 display block 3 background gray 4 padding 10px 5 margin 1px 6 7 name fontminusfamily arial verdana sansminusserif
maincss
Dr inż Stanisław Polak 5 Przedmiot Internet i jego zastosowanie
Poprawność serwisoacutew WWW Usługa WWW
Funkcjonalność stron
Test KrugaI Co to jest za witryna mdash
identyfikator witryny nazwa logoslogan
I Na jakiej jestem podstronie mdashnazwa podstrony
I Jakie są głoacutewne kategorie mdashnawigacja globalna
I Jakie mam opcje do wyboru natym poziomie struktury mdashnawigacja lokalna
I Gdzie znajduję się w odniesieniudo całej struktury mdash bdquoTu jesteśrdquościeżka dostępu
I W jaki sposoacuteb mogę czegośposzukać mdash Wyszukiwarka
Dr inż Stanisław Polak 6 Przedmiot Internet i jego zastosowanie
Poprawność serwisoacutew WWW Usługa WWW
Poprawność stron WWW
TestowanieI PrzeglądarkiI OgraniczeniaI httpvalidatorw3org
Dr inż Stanisław Polak 7 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Model usługi WWW
Serwer WWW
Adres IP
ProtokoacutełPort
Przeglądarka WWW
Dr inż Stanisław Polak 8 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Żądanie klienta
Serwer WWW
80
Przeglądarka WWW
1 GET dokument html HTTP 1 12 Host www icsr agh edu pl3 AcceptminusLanguage pl q=10 en q=054 Accept texthtml q=10 textlowast q=08 image g i f q=06 image j p eg q=06 lowastlowast q
=015 AcceptminusEncoding bzip2 q=1 gzip q=08 zip q=056 AcceptminusCharset utfminus8q=10 isominus8859minus2q=087 UserminusAgent Mozilla 8
Adres strony httpwwwicsraghedupldokumenthtml
Dr inż Stanisław Polak 9 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Odpowiedź serwera
Serwer WWW
80
Przeglądarka WWW
1 HTTP 1 1 200 OK2 Date Thu 20 Dec 2001 1 2 0 4 3 0 GMT3 Serwer Apache 2 2 84 LastminusModified Thu 20 Dec 2001 0 0 0 4 3 0 GMT5 Etag 12345 -678 -900ab6 CacheminusControl maxminusage=6048007 Expires Fri 21 Dec 2001 0 0 0 0 0 0 GMT8 Contentminustype texthtml charset=utfminus89 Contentminuslength
1011 lthtmlgt12 13 lthtmlgt
Dr inż Stanisław Polak 10 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Protokoacuteł HTTP Usługa WWW
Komendy protokołu HTTP
I GETI HEADI POSTI OPTIONSI TRACEI DELETEI PUTI CONNECT
1 GET index html HTTP 1 0
Żądanie
1 HTTP 1 1 200 OK2 Date Mon 09 Aug 2002 1 7 0 2 0 8 GMT3 Server Apache 2 0 3 3 ( UNIX )4 ContentminusLength 17765 ContentminusType texthtml charset=ISOminus8859minus167 lt DOCTYPE HTML PUBLIC -IETFDTD HTML 20ENgt8 lthtmlgt9
10 lthtmlgt
Odpowiedź
Dr inż Stanisław Polak 11 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Protokoacuteł HTTP2Najważniejsze nowości
I Jedno połączenieI MultipleksacjaI Powiadomienia bdquoPushrdquoI PriorytetyzacjaI BinarnośćI Kompresja nagłoacutewkoacutew
Źroacutedło httpsblogcloudflarecomintroducing-http2
Dr inż Stanisław Polak 12 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Moduły
Repozytorium modułoacutew dla ApachersquoaI httpmodulesapacheorg
I Zawiera ponad 500 modułoacutew
Statyczne
MPM So CGI SSL Rdzeń serwera
httpd
Dynamiczne
So
Rdzeń serwera
httpd
LoadModule cgi module modulesmod cgiso
LoadModule ssl module modulesmod sslso
Moduły
MPM CGI SSL
Moduły dynamicznie ładowane (DSO)
Dr inż Stanisław Polak 13 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Wyboacuter modułu MPM
I UNIXI preforkI workerI event
I WindowsI mpm winnt
I OS2I mpmt os2
I NetwareI mpm netware
I BeOSI beos
Dr inż Stanisław Polak 14 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Ważniejsze katalogi i pliki serwera WWW
I binI apachectl (start stop restart graceful graceful-stop)I abI apxsI htpasswd
I logsI access logI error log
I confI cgi-binI htdocs
Dr inż Stanisław Polak 15 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Konfigurowanie serwera
Pliki konfiguracyjneI confhttpdconfI confextrahttpd-conf
Ważniejsze parametry
1 ServerRoot usrlocalapache22 DocumentRoot usrlocalapache2htdocs3 UserDir public_html4 UserDir disabled root5 Listen 806 User apache7 Group apache8 DirectoryIndex index html index html var index shtml index cgi index php
Dr inż Stanisław Polak 16 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie dostępem do zasoboacutew WWWModuły
1 Kontrola dostępuI mod authz host
2 UwierzytelnianieI Typ uwierzytelniania
I mod auth basicI mod auth digest
I Dostawca uwierzytelnianaI mod authn anonI mod authn dbdI mod authn dbmI mod authn fileI mod authnz ldapI
3 AutoryzacjaI mod authnz ldapI mod authz dbdI mod authz dbmI mod authz groupfileI mod authz ownerI mod authz user
Dr inż Stanisław Polak 17 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Kontrola dostępuPrzykłady
1 ltLocation gt2 Require host luke icsr agh edu pl3 ltLocationgt
1 ltLocation gt2 ltRequireAllgt3 Require all granted4 Require not ip 1 9 2 1 6 8 1 15 ltRequireAllgt6 ltLocationgt
1 ltLocation http11onlygt2 ltIf SERVER_PROTOCOL == rsquoHTTP 10rsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 18 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie i autoryzacja użytkownikaPrzykład bdquostrona httpwwwprzykladpl~polaktajny na hasłordquo
1 ltDirectory homelowast pub l i c h tm lgt2 3 AllowOverride AuthConfig4 5 ltD i r e c t o r ygt
confextrahttpd-userdirconf
Zmiana lub ustawienie hasła binhtpasswd
1 AuthType Basic2 AuthName Strona na haslo3 AuthBasicProvider file4 AuthUserFile homepolakpublic_htmltajny htpasswd5 Require user polak6 R e q u i r e v a l i dminusu s e r
˜polakpublic htmltajnyhtaccess
Dr inż Stanisław Polak 19 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie łączonePrzykład
1 ltLocation registeredminususersminusonlygt2 AuthType Basic3 AuthName Strona na hasło4 AuthBasicProvider file5 AuthUserFile usrlocalapache2passwdpasswords6 ltRequireAllgt7 Require user polak8 Require ip 1 9 2 1 6 8 1 1 1 9 2 1 6 8 1 29 ltRequireAllgt
10 ltLocationgt
Dr inż Stanisław Polak 20 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Uzgadnianie zawartości
I MultiViewsI Options +MultiViewsI Options All +MultiViews
I Mapa typoacutew mdash pliki var
1 URI document html en2 Content-Type texthtml qs=1 level=23 Content-Language en4 5 Description Strona po angielsku67 URI document html pl8 Content-Type texthtml qs=019 Content-Language pl
10 11 Description Strona po polsku
Przykładowy plik z mapą typoacutew
Dr inż Stanisław Polak 21 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Server Side Includes (SSI)
1 ltminusminuspolecenie atrybut=warto ś ć atrybut=warto ś ć minusminusgt
Składnia dyrektywy SSI
1 2 Options +Includes3 Opt ions +IncludesNOEXEC4 5 AddType texthtml shtml6 AddOutputFilter INCLUDES shtml7 XBitHack on Po wykonaniu chmod +x dokumenthtml dokumenty HTML staną si ę
dokumentami SSI
Plik rsquoconfhttpdconfrsquo lub rsquohtaccessrsquo
Dr inż Stanisław Polak 22 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest ltminusminusecho var=DATE_LOCAL
minusminusgt7 ltbodygt8 lthtmlgt
Wejściowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest 30minus10minus017 ltbodygt8 lthtmlgt
Wyjściowy dokument HTML
Dr inż Stanisław Polak 23 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe zmienne SSI
I DOCUMENT NAMEI DATE LOCALI LAST MODIFIED
Dr inż Stanisław Polak 24 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Polecenia SSI
I configI echoI includeI execI fsizeI flastmodI setI printenvI if elif else endif
Dr inż Stanisław Polak 25 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie robotami
1 Plik robotstxtI User-AgentI Disallow
2 HTMLI META
rsquoRobotsrsquo
3 Kontrola dostępu
1 Userminusagent lowast2 Disallow
1 lthtmlgt2 ltheadgt3 lttitlegt lttitlegt4 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt5 ltminusminus6 ltMETA NAME=ROBOTS CONTENT=NOINDEX FOLLOWgt7 ltMETA NAME=ROBOTS CONTENT=INDEX NOFOLLOWgt8 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt9 minusminusgt
10 ltheadgt11
1 ltLocation notminusindexablegt2 ltIf tolower ( HTTP_USER_AGENT ) =~ robot ||
REMOTE_HOST == rsquobadrobotcomrsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 26 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Informacje dla robotoacutew
1 ltmeta name=Autor content=Stanisław Polakgt2 ltmeta name=Description content=Strona domowa Stanisława Polakagt3 ltmeta name=Keywords content=XML Java PHP ontologiagt
Dr inż Stanisław Polak 27 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
SSL a serwer Apache
I SSL mdash protokoacuteł zaszyfrowanej komunikacjiI Szyfrowanie z kluczem publicznymI Szyfrowanie przesyłanych informacjiI Uwierzytelnianie serwera
Dr inż Stanisław Polak 28 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Podstawowa konfiguracja protokołu SSL
I configure ndashenable-ssl
1 Listen 4432 SSLEngine on3 SSLCertificateKeyFile usrlocalapache2confserver key4 SSLCertificateFile usrlocalapache2confserver crt5 6 ltDirectory usrlocalapache2htdocsbezpiecznygt7 SSLRequireSSL8 ltDirectorygt
confextrahttpd-sslconf
Dr inż Stanisław Polak 29 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Instalacja klucza prywatnego oraz tymczasowego certyfikatu
1 utwoacuterz zaszyfrowany w standardzie DES3 klucz prywatny2 openssl genrsa -des3 1024 gt usrlocalapache2confserverkey3 utwoacuterz niezaszyfrowany klucz prywatny4 openssl genrsa 1024 gt usrlocalapache2confserverkey5 chmod 400 usrlocalapache2confserverkey6 utwoacuterz ż ądanie po ś wiadczonego certyfikatu7 openssl req -new -key usrlocalapache2confserverkey -out tmpservercsr8 9 Country Name (2 letter code ) [ AU ] PL
10 State or Province Name ( full name ) [ SomeminusState ] malopolskie11 Locality Name ( eg city ) [ ] Krakow12 Organization Name ( eg company ) [ Internet Widgits Pty Ltd ] Akademia Gorniczo-Hutnicza13 Organizational Unit Name ( eg section ) [ ] EAIiE Katedra Informatyki14 Common Name ( eg YOUR name ) [ ] wwwicsraghedupl15 Email Address [ ] webmastericsraghedupl16 1718 utwoacuterz tymczasowy certyfikat podpisuj ąc go przez samego siebie19 openssl req -x509 -key usrlocalapache2confserverkey -in tmpservercsr -out usrlocalapache2confservercrt -days 36520 rm tmpserver csr
1 openssl s_client minusconnect localhost 4 4 3 minusstate2 GET HTTP 1 03 ltklawisz Entergt4 ltklawisz Entergt
Testowanie połączenia
Dr inż Stanisław Polak 30 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Bezpieczeństwo serwera WWWI Uprawnienia użytkownikaI Prawa dostępu do plikoacutewI Dostęp do katalogoacutew nadrzędnychI Skrypty CGII DziennikiI Identyfikacja serweraI Firewall aplikacyjny bdquoModSecurityrdquo mdash moduł
bdquomod security2rdquoI Przykład metody włamaniahttp[target]indexphpmosConfig_absolute_path=http[attacker]cmdphp
I Strona głoacutewna mdashhttpwwwmodsecurityorg
I RegułyI httpwwwmodsecurityorgprojectscommercialrulesmdash komercyjne firmybdquoTrustwave SpiderLabs
I httpwwwatomicorpcomchannelsasl-20rulesmdash komercyjne firmybdquoAtomicorprdquo
I httpsgithubcomSpiderLabsowasp-modsecurity-crsmdash darmowe
I httpupdatesatomicorpcomchannelsrulesdelayedmdash darmowe
I Graficzny edytor reguł mdashhttpremonetneacom
1 chown minusR root usrlocalapache2
2 chmod minusR u+w usrlocalapache2
3 chmod gominusrx usrlocalapache2logs
4 chmod gominusrx usrlocalapache2conf
1 ltDirectory gt2 Options FollowSymLinks3 AllowOverride None4 Require all denied5 ltDirectorygt
confhttpdconf
1 ltDirectory homelowastpub l i c h tm lgt
2 Opt ions ExecCGI3 4 ltD i r e c t o r ygt
1 ServerTokens Prod2 ServerSignature Off
confextrahttpd-defaultconfDr inż Stanisław Polak 31 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Firewall aplikacyjny bdquoModSecurityrdquoFazy przetwarzania
Dr inż Stanisław Polak 32 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Żądanie klienta
Serwer WWW
80
Przeglądarka WWW
1 GET dokument html HTTP 1 12 Host www icsr agh edu pl3 AcceptminusLanguage pl q=10 en q=054 Accept texthtml q=10 textlowast q=08 image g i f q=06 image j p eg q=06 lowastlowast q
=015 AcceptminusEncoding bzip2 q=1 gzip q=08 zip q=056 AcceptminusCharset utfminus8q=10 isominus8859minus2q=087 UserminusAgent Mozilla 8
Adres strony httpwwwicsraghedupldokumenthtml
Dr inż Stanisław Polak 9 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Odpowiedź serwera
Serwer WWW
80
Przeglądarka WWW
1 HTTP 1 1 200 OK2 Date Thu 20 Dec 2001 1 2 0 4 3 0 GMT3 Serwer Apache 2 2 84 LastminusModified Thu 20 Dec 2001 0 0 0 4 3 0 GMT5 Etag 12345 -678 -900ab6 CacheminusControl maxminusage=6048007 Expires Fri 21 Dec 2001 0 0 0 0 0 0 GMT8 Contentminustype texthtml charset=utfminus89 Contentminuslength
1011 lthtmlgt12 13 lthtmlgt
Dr inż Stanisław Polak 10 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Protokoacuteł HTTP Usługa WWW
Komendy protokołu HTTP
I GETI HEADI POSTI OPTIONSI TRACEI DELETEI PUTI CONNECT
1 GET index html HTTP 1 0
Żądanie
1 HTTP 1 1 200 OK2 Date Mon 09 Aug 2002 1 7 0 2 0 8 GMT3 Server Apache 2 0 3 3 ( UNIX )4 ContentminusLength 17765 ContentminusType texthtml charset=ISOminus8859minus167 lt DOCTYPE HTML PUBLIC -IETFDTD HTML 20ENgt8 lthtmlgt9
10 lthtmlgt
Odpowiedź
Dr inż Stanisław Polak 11 Przedmiot Internet i jego zastosowanie
Protokoacuteł HTTP Usługa WWW
Protokoacuteł HTTP2Najważniejsze nowości
I Jedno połączenieI MultipleksacjaI Powiadomienia bdquoPushrdquoI PriorytetyzacjaI BinarnośćI Kompresja nagłoacutewkoacutew
Źroacutedło httpsblogcloudflarecomintroducing-http2
Dr inż Stanisław Polak 12 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Moduły
Repozytorium modułoacutew dla ApachersquoaI httpmodulesapacheorg
I Zawiera ponad 500 modułoacutew
Statyczne
MPM So CGI SSL Rdzeń serwera
httpd
Dynamiczne
So
Rdzeń serwera
httpd
LoadModule cgi module modulesmod cgiso
LoadModule ssl module modulesmod sslso
Moduły
MPM CGI SSL
Moduły dynamicznie ładowane (DSO)
Dr inż Stanisław Polak 13 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Wyboacuter modułu MPM
I UNIXI preforkI workerI event
I WindowsI mpm winnt
I OS2I mpmt os2
I NetwareI mpm netware
I BeOSI beos
Dr inż Stanisław Polak 14 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Ważniejsze katalogi i pliki serwera WWW
I binI apachectl (start stop restart graceful graceful-stop)I abI apxsI htpasswd
I logsI access logI error log
I confI cgi-binI htdocs
Dr inż Stanisław Polak 15 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Konfigurowanie serwera
Pliki konfiguracyjneI confhttpdconfI confextrahttpd-conf
Ważniejsze parametry
1 ServerRoot usrlocalapache22 DocumentRoot usrlocalapache2htdocs3 UserDir public_html4 UserDir disabled root5 Listen 806 User apache7 Group apache8 DirectoryIndex index html index html var index shtml index cgi index php
Dr inż Stanisław Polak 16 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie dostępem do zasoboacutew WWWModuły
1 Kontrola dostępuI mod authz host
2 UwierzytelnianieI Typ uwierzytelniania
I mod auth basicI mod auth digest
I Dostawca uwierzytelnianaI mod authn anonI mod authn dbdI mod authn dbmI mod authn fileI mod authnz ldapI
3 AutoryzacjaI mod authnz ldapI mod authz dbdI mod authz dbmI mod authz groupfileI mod authz ownerI mod authz user
Dr inż Stanisław Polak 17 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Kontrola dostępuPrzykłady
1 ltLocation gt2 Require host luke icsr agh edu pl3 ltLocationgt
1 ltLocation gt2 ltRequireAllgt3 Require all granted4 Require not ip 1 9 2 1 6 8 1 15 ltRequireAllgt6 ltLocationgt
1 ltLocation http11onlygt2 ltIf SERVER_PROTOCOL == rsquoHTTP 10rsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 18 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie i autoryzacja użytkownikaPrzykład bdquostrona httpwwwprzykladpl~polaktajny na hasłordquo
1 ltDirectory homelowast pub l i c h tm lgt2 3 AllowOverride AuthConfig4 5 ltD i r e c t o r ygt
confextrahttpd-userdirconf
Zmiana lub ustawienie hasła binhtpasswd
1 AuthType Basic2 AuthName Strona na haslo3 AuthBasicProvider file4 AuthUserFile homepolakpublic_htmltajny htpasswd5 Require user polak6 R e q u i r e v a l i dminusu s e r
˜polakpublic htmltajnyhtaccess
Dr inż Stanisław Polak 19 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie łączonePrzykład
1 ltLocation registeredminususersminusonlygt2 AuthType Basic3 AuthName Strona na hasło4 AuthBasicProvider file5 AuthUserFile usrlocalapache2passwdpasswords6 ltRequireAllgt7 Require user polak8 Require ip 1 9 2 1 6 8 1 1 1 9 2 1 6 8 1 29 ltRequireAllgt
10 ltLocationgt
Dr inż Stanisław Polak 20 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Uzgadnianie zawartości
I MultiViewsI Options +MultiViewsI Options All +MultiViews
I Mapa typoacutew mdash pliki var
1 URI document html en2 Content-Type texthtml qs=1 level=23 Content-Language en4 5 Description Strona po angielsku67 URI document html pl8 Content-Type texthtml qs=019 Content-Language pl
10 11 Description Strona po polsku
Przykładowy plik z mapą typoacutew
Dr inż Stanisław Polak 21 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Server Side Includes (SSI)
1 ltminusminuspolecenie atrybut=warto ś ć atrybut=warto ś ć minusminusgt
Składnia dyrektywy SSI
1 2 Options +Includes3 Opt ions +IncludesNOEXEC4 5 AddType texthtml shtml6 AddOutputFilter INCLUDES shtml7 XBitHack on Po wykonaniu chmod +x dokumenthtml dokumenty HTML staną si ę
dokumentami SSI
Plik rsquoconfhttpdconfrsquo lub rsquohtaccessrsquo
Dr inż Stanisław Polak 22 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest ltminusminusecho var=DATE_LOCAL
minusminusgt7 ltbodygt8 lthtmlgt
Wejściowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest 30minus10minus017 ltbodygt8 lthtmlgt
Wyjściowy dokument HTML
Dr inż Stanisław Polak 23 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe zmienne SSI
I DOCUMENT NAMEI DATE LOCALI LAST MODIFIED
Dr inż Stanisław Polak 24 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Polecenia SSI
I configI echoI includeI execI fsizeI flastmodI setI printenvI if elif else endif
Dr inż Stanisław Polak 25 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie robotami
1 Plik robotstxtI User-AgentI Disallow
2 HTMLI META
rsquoRobotsrsquo
3 Kontrola dostępu
1 Userminusagent lowast2 Disallow
1 lthtmlgt2 ltheadgt3 lttitlegt lttitlegt4 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt5 ltminusminus6 ltMETA NAME=ROBOTS CONTENT=NOINDEX FOLLOWgt7 ltMETA NAME=ROBOTS CONTENT=INDEX NOFOLLOWgt8 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt9 minusminusgt
10 ltheadgt11
1 ltLocation notminusindexablegt2 ltIf tolower ( HTTP_USER_AGENT ) =~ robot ||
REMOTE_HOST == rsquobadrobotcomrsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 26 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Informacje dla robotoacutew
1 ltmeta name=Autor content=Stanisław Polakgt2 ltmeta name=Description content=Strona domowa Stanisława Polakagt3 ltmeta name=Keywords content=XML Java PHP ontologiagt
Dr inż Stanisław Polak 27 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
SSL a serwer Apache
I SSL mdash protokoacuteł zaszyfrowanej komunikacjiI Szyfrowanie z kluczem publicznymI Szyfrowanie przesyłanych informacjiI Uwierzytelnianie serwera
Dr inż Stanisław Polak 28 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Podstawowa konfiguracja protokołu SSL
I configure ndashenable-ssl
1 Listen 4432 SSLEngine on3 SSLCertificateKeyFile usrlocalapache2confserver key4 SSLCertificateFile usrlocalapache2confserver crt5 6 ltDirectory usrlocalapache2htdocsbezpiecznygt7 SSLRequireSSL8 ltDirectorygt
confextrahttpd-sslconf
Dr inż Stanisław Polak 29 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Instalacja klucza prywatnego oraz tymczasowego certyfikatu
1 utwoacuterz zaszyfrowany w standardzie DES3 klucz prywatny2 openssl genrsa -des3 1024 gt usrlocalapache2confserverkey3 utwoacuterz niezaszyfrowany klucz prywatny4 openssl genrsa 1024 gt usrlocalapache2confserverkey5 chmod 400 usrlocalapache2confserverkey6 utwoacuterz ż ądanie po ś wiadczonego certyfikatu7 openssl req -new -key usrlocalapache2confserverkey -out tmpservercsr8 9 Country Name (2 letter code ) [ AU ] PL
10 State or Province Name ( full name ) [ SomeminusState ] malopolskie11 Locality Name ( eg city ) [ ] Krakow12 Organization Name ( eg company ) [ Internet Widgits Pty Ltd ] Akademia Gorniczo-Hutnicza13 Organizational Unit Name ( eg section ) [ ] EAIiE Katedra Informatyki14 Common Name ( eg YOUR name ) [ ] wwwicsraghedupl15 Email Address [ ] webmastericsraghedupl16 1718 utwoacuterz tymczasowy certyfikat podpisuj ąc go przez samego siebie19 openssl req -x509 -key usrlocalapache2confserverkey -in tmpservercsr -out usrlocalapache2confservercrt -days 36520 rm tmpserver csr
1 openssl s_client minusconnect localhost 4 4 3 minusstate2 GET HTTP 1 03 ltklawisz Entergt4 ltklawisz Entergt
Testowanie połączenia
Dr inż Stanisław Polak 30 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Bezpieczeństwo serwera WWWI Uprawnienia użytkownikaI Prawa dostępu do plikoacutewI Dostęp do katalogoacutew nadrzędnychI Skrypty CGII DziennikiI Identyfikacja serweraI Firewall aplikacyjny bdquoModSecurityrdquo mdash moduł
bdquomod security2rdquoI Przykład metody włamaniahttp[target]indexphpmosConfig_absolute_path=http[attacker]cmdphp
I Strona głoacutewna mdashhttpwwwmodsecurityorg
I RegułyI httpwwwmodsecurityorgprojectscommercialrulesmdash komercyjne firmybdquoTrustwave SpiderLabs
I httpwwwatomicorpcomchannelsasl-20rulesmdash komercyjne firmybdquoAtomicorprdquo
I httpsgithubcomSpiderLabsowasp-modsecurity-crsmdash darmowe
I httpupdatesatomicorpcomchannelsrulesdelayedmdash darmowe
I Graficzny edytor reguł mdashhttpremonetneacom
1 chown minusR root usrlocalapache2
2 chmod minusR u+w usrlocalapache2
3 chmod gominusrx usrlocalapache2logs
4 chmod gominusrx usrlocalapache2conf
1 ltDirectory gt2 Options FollowSymLinks3 AllowOverride None4 Require all denied5 ltDirectorygt
confhttpdconf
1 ltDirectory homelowastpub l i c h tm lgt
2 Opt ions ExecCGI3 4 ltD i r e c t o r ygt
1 ServerTokens Prod2 ServerSignature Off
confextrahttpd-defaultconfDr inż Stanisław Polak 31 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Firewall aplikacyjny bdquoModSecurityrdquoFazy przetwarzania
Dr inż Stanisław Polak 32 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Moduły
Repozytorium modułoacutew dla ApachersquoaI httpmodulesapacheorg
I Zawiera ponad 500 modułoacutew
Statyczne
MPM So CGI SSL Rdzeń serwera
httpd
Dynamiczne
So
Rdzeń serwera
httpd
LoadModule cgi module modulesmod cgiso
LoadModule ssl module modulesmod sslso
Moduły
MPM CGI SSL
Moduły dynamicznie ładowane (DSO)
Dr inż Stanisław Polak 13 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Wyboacuter modułu MPM
I UNIXI preforkI workerI event
I WindowsI mpm winnt
I OS2I mpmt os2
I NetwareI mpm netware
I BeOSI beos
Dr inż Stanisław Polak 14 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Ważniejsze katalogi i pliki serwera WWW
I binI apachectl (start stop restart graceful graceful-stop)I abI apxsI htpasswd
I logsI access logI error log
I confI cgi-binI htdocs
Dr inż Stanisław Polak 15 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Konfigurowanie serwera
Pliki konfiguracyjneI confhttpdconfI confextrahttpd-conf
Ważniejsze parametry
1 ServerRoot usrlocalapache22 DocumentRoot usrlocalapache2htdocs3 UserDir public_html4 UserDir disabled root5 Listen 806 User apache7 Group apache8 DirectoryIndex index html index html var index shtml index cgi index php
Dr inż Stanisław Polak 16 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie dostępem do zasoboacutew WWWModuły
1 Kontrola dostępuI mod authz host
2 UwierzytelnianieI Typ uwierzytelniania
I mod auth basicI mod auth digest
I Dostawca uwierzytelnianaI mod authn anonI mod authn dbdI mod authn dbmI mod authn fileI mod authnz ldapI
3 AutoryzacjaI mod authnz ldapI mod authz dbdI mod authz dbmI mod authz groupfileI mod authz ownerI mod authz user
Dr inż Stanisław Polak 17 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Kontrola dostępuPrzykłady
1 ltLocation gt2 Require host luke icsr agh edu pl3 ltLocationgt
1 ltLocation gt2 ltRequireAllgt3 Require all granted4 Require not ip 1 9 2 1 6 8 1 15 ltRequireAllgt6 ltLocationgt
1 ltLocation http11onlygt2 ltIf SERVER_PROTOCOL == rsquoHTTP 10rsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 18 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie i autoryzacja użytkownikaPrzykład bdquostrona httpwwwprzykladpl~polaktajny na hasłordquo
1 ltDirectory homelowast pub l i c h tm lgt2 3 AllowOverride AuthConfig4 5 ltD i r e c t o r ygt
confextrahttpd-userdirconf
Zmiana lub ustawienie hasła binhtpasswd
1 AuthType Basic2 AuthName Strona na haslo3 AuthBasicProvider file4 AuthUserFile homepolakpublic_htmltajny htpasswd5 Require user polak6 R e q u i r e v a l i dminusu s e r
˜polakpublic htmltajnyhtaccess
Dr inż Stanisław Polak 19 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie łączonePrzykład
1 ltLocation registeredminususersminusonlygt2 AuthType Basic3 AuthName Strona na hasło4 AuthBasicProvider file5 AuthUserFile usrlocalapache2passwdpasswords6 ltRequireAllgt7 Require user polak8 Require ip 1 9 2 1 6 8 1 1 1 9 2 1 6 8 1 29 ltRequireAllgt
10 ltLocationgt
Dr inż Stanisław Polak 20 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Uzgadnianie zawartości
I MultiViewsI Options +MultiViewsI Options All +MultiViews
I Mapa typoacutew mdash pliki var
1 URI document html en2 Content-Type texthtml qs=1 level=23 Content-Language en4 5 Description Strona po angielsku67 URI document html pl8 Content-Type texthtml qs=019 Content-Language pl
10 11 Description Strona po polsku
Przykładowy plik z mapą typoacutew
Dr inż Stanisław Polak 21 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Server Side Includes (SSI)
1 ltminusminuspolecenie atrybut=warto ś ć atrybut=warto ś ć minusminusgt
Składnia dyrektywy SSI
1 2 Options +Includes3 Opt ions +IncludesNOEXEC4 5 AddType texthtml shtml6 AddOutputFilter INCLUDES shtml7 XBitHack on Po wykonaniu chmod +x dokumenthtml dokumenty HTML staną si ę
dokumentami SSI
Plik rsquoconfhttpdconfrsquo lub rsquohtaccessrsquo
Dr inż Stanisław Polak 22 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest ltminusminusecho var=DATE_LOCAL
minusminusgt7 ltbodygt8 lthtmlgt
Wejściowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest 30minus10minus017 ltbodygt8 lthtmlgt
Wyjściowy dokument HTML
Dr inż Stanisław Polak 23 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe zmienne SSI
I DOCUMENT NAMEI DATE LOCALI LAST MODIFIED
Dr inż Stanisław Polak 24 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Polecenia SSI
I configI echoI includeI execI fsizeI flastmodI setI printenvI if elif else endif
Dr inż Stanisław Polak 25 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie robotami
1 Plik robotstxtI User-AgentI Disallow
2 HTMLI META
rsquoRobotsrsquo
3 Kontrola dostępu
1 Userminusagent lowast2 Disallow
1 lthtmlgt2 ltheadgt3 lttitlegt lttitlegt4 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt5 ltminusminus6 ltMETA NAME=ROBOTS CONTENT=NOINDEX FOLLOWgt7 ltMETA NAME=ROBOTS CONTENT=INDEX NOFOLLOWgt8 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt9 minusminusgt
10 ltheadgt11
1 ltLocation notminusindexablegt2 ltIf tolower ( HTTP_USER_AGENT ) =~ robot ||
REMOTE_HOST == rsquobadrobotcomrsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 26 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Informacje dla robotoacutew
1 ltmeta name=Autor content=Stanisław Polakgt2 ltmeta name=Description content=Strona domowa Stanisława Polakagt3 ltmeta name=Keywords content=XML Java PHP ontologiagt
Dr inż Stanisław Polak 27 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
SSL a serwer Apache
I SSL mdash protokoacuteł zaszyfrowanej komunikacjiI Szyfrowanie z kluczem publicznymI Szyfrowanie przesyłanych informacjiI Uwierzytelnianie serwera
Dr inż Stanisław Polak 28 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Podstawowa konfiguracja protokołu SSL
I configure ndashenable-ssl
1 Listen 4432 SSLEngine on3 SSLCertificateKeyFile usrlocalapache2confserver key4 SSLCertificateFile usrlocalapache2confserver crt5 6 ltDirectory usrlocalapache2htdocsbezpiecznygt7 SSLRequireSSL8 ltDirectorygt
confextrahttpd-sslconf
Dr inż Stanisław Polak 29 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Instalacja klucza prywatnego oraz tymczasowego certyfikatu
1 utwoacuterz zaszyfrowany w standardzie DES3 klucz prywatny2 openssl genrsa -des3 1024 gt usrlocalapache2confserverkey3 utwoacuterz niezaszyfrowany klucz prywatny4 openssl genrsa 1024 gt usrlocalapache2confserverkey5 chmod 400 usrlocalapache2confserverkey6 utwoacuterz ż ądanie po ś wiadczonego certyfikatu7 openssl req -new -key usrlocalapache2confserverkey -out tmpservercsr8 9 Country Name (2 letter code ) [ AU ] PL
10 State or Province Name ( full name ) [ SomeminusState ] malopolskie11 Locality Name ( eg city ) [ ] Krakow12 Organization Name ( eg company ) [ Internet Widgits Pty Ltd ] Akademia Gorniczo-Hutnicza13 Organizational Unit Name ( eg section ) [ ] EAIiE Katedra Informatyki14 Common Name ( eg YOUR name ) [ ] wwwicsraghedupl15 Email Address [ ] webmastericsraghedupl16 1718 utwoacuterz tymczasowy certyfikat podpisuj ąc go przez samego siebie19 openssl req -x509 -key usrlocalapache2confserverkey -in tmpservercsr -out usrlocalapache2confservercrt -days 36520 rm tmpserver csr
1 openssl s_client minusconnect localhost 4 4 3 minusstate2 GET HTTP 1 03 ltklawisz Entergt4 ltklawisz Entergt
Testowanie połączenia
Dr inż Stanisław Polak 30 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Bezpieczeństwo serwera WWWI Uprawnienia użytkownikaI Prawa dostępu do plikoacutewI Dostęp do katalogoacutew nadrzędnychI Skrypty CGII DziennikiI Identyfikacja serweraI Firewall aplikacyjny bdquoModSecurityrdquo mdash moduł
bdquomod security2rdquoI Przykład metody włamaniahttp[target]indexphpmosConfig_absolute_path=http[attacker]cmdphp
I Strona głoacutewna mdashhttpwwwmodsecurityorg
I RegułyI httpwwwmodsecurityorgprojectscommercialrulesmdash komercyjne firmybdquoTrustwave SpiderLabs
I httpwwwatomicorpcomchannelsasl-20rulesmdash komercyjne firmybdquoAtomicorprdquo
I httpsgithubcomSpiderLabsowasp-modsecurity-crsmdash darmowe
I httpupdatesatomicorpcomchannelsrulesdelayedmdash darmowe
I Graficzny edytor reguł mdashhttpremonetneacom
1 chown minusR root usrlocalapache2
2 chmod minusR u+w usrlocalapache2
3 chmod gominusrx usrlocalapache2logs
4 chmod gominusrx usrlocalapache2conf
1 ltDirectory gt2 Options FollowSymLinks3 AllowOverride None4 Require all denied5 ltDirectorygt
confhttpdconf
1 ltDirectory homelowastpub l i c h tm lgt
2 Opt ions ExecCGI3 4 ltD i r e c t o r ygt
1 ServerTokens Prod2 ServerSignature Off
confextrahttpd-defaultconfDr inż Stanisław Polak 31 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Firewall aplikacyjny bdquoModSecurityrdquoFazy przetwarzania
Dr inż Stanisław Polak 32 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie dostępem do zasoboacutew WWWModuły
1 Kontrola dostępuI mod authz host
2 UwierzytelnianieI Typ uwierzytelniania
I mod auth basicI mod auth digest
I Dostawca uwierzytelnianaI mod authn anonI mod authn dbdI mod authn dbmI mod authn fileI mod authnz ldapI
3 AutoryzacjaI mod authnz ldapI mod authz dbdI mod authz dbmI mod authz groupfileI mod authz ownerI mod authz user
Dr inż Stanisław Polak 17 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Kontrola dostępuPrzykłady
1 ltLocation gt2 Require host luke icsr agh edu pl3 ltLocationgt
1 ltLocation gt2 ltRequireAllgt3 Require all granted4 Require not ip 1 9 2 1 6 8 1 15 ltRequireAllgt6 ltLocationgt
1 ltLocation http11onlygt2 ltIf SERVER_PROTOCOL == rsquoHTTP 10rsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 18 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie i autoryzacja użytkownikaPrzykład bdquostrona httpwwwprzykladpl~polaktajny na hasłordquo
1 ltDirectory homelowast pub l i c h tm lgt2 3 AllowOverride AuthConfig4 5 ltD i r e c t o r ygt
confextrahttpd-userdirconf
Zmiana lub ustawienie hasła binhtpasswd
1 AuthType Basic2 AuthName Strona na haslo3 AuthBasicProvider file4 AuthUserFile homepolakpublic_htmltajny htpasswd5 Require user polak6 R e q u i r e v a l i dminusu s e r
˜polakpublic htmltajnyhtaccess
Dr inż Stanisław Polak 19 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uwierzytelnianie łączonePrzykład
1 ltLocation registeredminususersminusonlygt2 AuthType Basic3 AuthName Strona na hasło4 AuthBasicProvider file5 AuthUserFile usrlocalapache2passwdpasswords6 ltRequireAllgt7 Require user polak8 Require ip 1 9 2 1 6 8 1 1 1 9 2 1 6 8 1 29 ltRequireAllgt
10 ltLocationgt
Dr inż Stanisław Polak 20 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Uzgadnianie zawartości
I MultiViewsI Options +MultiViewsI Options All +MultiViews
I Mapa typoacutew mdash pliki var
1 URI document html en2 Content-Type texthtml qs=1 level=23 Content-Language en4 5 Description Strona po angielsku67 URI document html pl8 Content-Type texthtml qs=019 Content-Language pl
10 11 Description Strona po polsku
Przykładowy plik z mapą typoacutew
Dr inż Stanisław Polak 21 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Server Side Includes (SSI)
1 ltminusminuspolecenie atrybut=warto ś ć atrybut=warto ś ć minusminusgt
Składnia dyrektywy SSI
1 2 Options +Includes3 Opt ions +IncludesNOEXEC4 5 AddType texthtml shtml6 AddOutputFilter INCLUDES shtml7 XBitHack on Po wykonaniu chmod +x dokumenthtml dokumenty HTML staną si ę
dokumentami SSI
Plik rsquoconfhttpdconfrsquo lub rsquohtaccessrsquo
Dr inż Stanisław Polak 22 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest ltminusminusecho var=DATE_LOCAL
minusminusgt7 ltbodygt8 lthtmlgt
Wejściowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest 30minus10minus017 ltbodygt8 lthtmlgt
Wyjściowy dokument HTML
Dr inż Stanisław Polak 23 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe zmienne SSI
I DOCUMENT NAMEI DATE LOCALI LAST MODIFIED
Dr inż Stanisław Polak 24 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Polecenia SSI
I configI echoI includeI execI fsizeI flastmodI setI printenvI if elif else endif
Dr inż Stanisław Polak 25 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie robotami
1 Plik robotstxtI User-AgentI Disallow
2 HTMLI META
rsquoRobotsrsquo
3 Kontrola dostępu
1 Userminusagent lowast2 Disallow
1 lthtmlgt2 ltheadgt3 lttitlegt lttitlegt4 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt5 ltminusminus6 ltMETA NAME=ROBOTS CONTENT=NOINDEX FOLLOWgt7 ltMETA NAME=ROBOTS CONTENT=INDEX NOFOLLOWgt8 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt9 minusminusgt
10 ltheadgt11
1 ltLocation notminusindexablegt2 ltIf tolower ( HTTP_USER_AGENT ) =~ robot ||
REMOTE_HOST == rsquobadrobotcomrsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 26 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Informacje dla robotoacutew
1 ltmeta name=Autor content=Stanisław Polakgt2 ltmeta name=Description content=Strona domowa Stanisława Polakagt3 ltmeta name=Keywords content=XML Java PHP ontologiagt
Dr inż Stanisław Polak 27 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
SSL a serwer Apache
I SSL mdash protokoacuteł zaszyfrowanej komunikacjiI Szyfrowanie z kluczem publicznymI Szyfrowanie przesyłanych informacjiI Uwierzytelnianie serwera
Dr inż Stanisław Polak 28 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Podstawowa konfiguracja protokołu SSL
I configure ndashenable-ssl
1 Listen 4432 SSLEngine on3 SSLCertificateKeyFile usrlocalapache2confserver key4 SSLCertificateFile usrlocalapache2confserver crt5 6 ltDirectory usrlocalapache2htdocsbezpiecznygt7 SSLRequireSSL8 ltDirectorygt
confextrahttpd-sslconf
Dr inż Stanisław Polak 29 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Instalacja klucza prywatnego oraz tymczasowego certyfikatu
1 utwoacuterz zaszyfrowany w standardzie DES3 klucz prywatny2 openssl genrsa -des3 1024 gt usrlocalapache2confserverkey3 utwoacuterz niezaszyfrowany klucz prywatny4 openssl genrsa 1024 gt usrlocalapache2confserverkey5 chmod 400 usrlocalapache2confserverkey6 utwoacuterz ż ądanie po ś wiadczonego certyfikatu7 openssl req -new -key usrlocalapache2confserverkey -out tmpservercsr8 9 Country Name (2 letter code ) [ AU ] PL
10 State or Province Name ( full name ) [ SomeminusState ] malopolskie11 Locality Name ( eg city ) [ ] Krakow12 Organization Name ( eg company ) [ Internet Widgits Pty Ltd ] Akademia Gorniczo-Hutnicza13 Organizational Unit Name ( eg section ) [ ] EAIiE Katedra Informatyki14 Common Name ( eg YOUR name ) [ ] wwwicsraghedupl15 Email Address [ ] webmastericsraghedupl16 1718 utwoacuterz tymczasowy certyfikat podpisuj ąc go przez samego siebie19 openssl req -x509 -key usrlocalapache2confserverkey -in tmpservercsr -out usrlocalapache2confservercrt -days 36520 rm tmpserver csr
1 openssl s_client minusconnect localhost 4 4 3 minusstate2 GET HTTP 1 03 ltklawisz Entergt4 ltklawisz Entergt
Testowanie połączenia
Dr inż Stanisław Polak 30 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Bezpieczeństwo serwera WWWI Uprawnienia użytkownikaI Prawa dostępu do plikoacutewI Dostęp do katalogoacutew nadrzędnychI Skrypty CGII DziennikiI Identyfikacja serweraI Firewall aplikacyjny bdquoModSecurityrdquo mdash moduł
bdquomod security2rdquoI Przykład metody włamaniahttp[target]indexphpmosConfig_absolute_path=http[attacker]cmdphp
I Strona głoacutewna mdashhttpwwwmodsecurityorg
I RegułyI httpwwwmodsecurityorgprojectscommercialrulesmdash komercyjne firmybdquoTrustwave SpiderLabs
I httpwwwatomicorpcomchannelsasl-20rulesmdash komercyjne firmybdquoAtomicorprdquo
I httpsgithubcomSpiderLabsowasp-modsecurity-crsmdash darmowe
I httpupdatesatomicorpcomchannelsrulesdelayedmdash darmowe
I Graficzny edytor reguł mdashhttpremonetneacom
1 chown minusR root usrlocalapache2
2 chmod minusR u+w usrlocalapache2
3 chmod gominusrx usrlocalapache2logs
4 chmod gominusrx usrlocalapache2conf
1 ltDirectory gt2 Options FollowSymLinks3 AllowOverride None4 Require all denied5 ltDirectorygt
confhttpdconf
1 ltDirectory homelowastpub l i c h tm lgt
2 Opt ions ExecCGI3 4 ltD i r e c t o r ygt
1 ServerTokens Prod2 ServerSignature Off
confextrahttpd-defaultconfDr inż Stanisław Polak 31 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Firewall aplikacyjny bdquoModSecurityrdquoFazy przetwarzania
Dr inż Stanisław Polak 32 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Uzgadnianie zawartości
I MultiViewsI Options +MultiViewsI Options All +MultiViews
I Mapa typoacutew mdash pliki var
1 URI document html en2 Content-Type texthtml qs=1 level=23 Content-Language en4 5 Description Strona po angielsku67 URI document html pl8 Content-Type texthtml qs=019 Content-Language pl
10 11 Description Strona po polsku
Przykładowy plik z mapą typoacutew
Dr inż Stanisław Polak 21 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Server Side Includes (SSI)
1 ltminusminuspolecenie atrybut=warto ś ć atrybut=warto ś ć minusminusgt
Składnia dyrektywy SSI
1 2 Options +Includes3 Opt ions +IncludesNOEXEC4 5 AddType texthtml shtml6 AddOutputFilter INCLUDES shtml7 XBitHack on Po wykonaniu chmod +x dokumenthtml dokumenty HTML staną si ę
dokumentami SSI
Plik rsquoconfhttpdconfrsquo lub rsquohtaccessrsquo
Dr inż Stanisław Polak 22 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest ltminusminusecho var=DATE_LOCAL
minusminusgt7 ltbodygt8 lthtmlgt
Wejściowy dokument SSI
1 lthtmlgt2 ltheadgt3 lttitlegtdatalttitlegt4 ltheadgt5 ltbodygt6 Dzisiaj jest 30minus10minus017 ltbodygt8 lthtmlgt
Wyjściowy dokument HTML
Dr inż Stanisław Polak 23 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe zmienne SSI
I DOCUMENT NAMEI DATE LOCALI LAST MODIFIED
Dr inż Stanisław Polak 24 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Polecenia SSI
I configI echoI includeI execI fsizeI flastmodI setI printenvI if elif else endif
Dr inż Stanisław Polak 25 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie robotami
1 Plik robotstxtI User-AgentI Disallow
2 HTMLI META
rsquoRobotsrsquo
3 Kontrola dostępu
1 Userminusagent lowast2 Disallow
1 lthtmlgt2 ltheadgt3 lttitlegt lttitlegt4 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt5 ltminusminus6 ltMETA NAME=ROBOTS CONTENT=NOINDEX FOLLOWgt7 ltMETA NAME=ROBOTS CONTENT=INDEX NOFOLLOWgt8 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt9 minusminusgt
10 ltheadgt11
1 ltLocation notminusindexablegt2 ltIf tolower ( HTTP_USER_AGENT ) =~ robot ||
REMOTE_HOST == rsquobadrobotcomrsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 26 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Informacje dla robotoacutew
1 ltmeta name=Autor content=Stanisław Polakgt2 ltmeta name=Description content=Strona domowa Stanisława Polakagt3 ltmeta name=Keywords content=XML Java PHP ontologiagt
Dr inż Stanisław Polak 27 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
SSL a serwer Apache
I SSL mdash protokoacuteł zaszyfrowanej komunikacjiI Szyfrowanie z kluczem publicznymI Szyfrowanie przesyłanych informacjiI Uwierzytelnianie serwera
Dr inż Stanisław Polak 28 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Podstawowa konfiguracja protokołu SSL
I configure ndashenable-ssl
1 Listen 4432 SSLEngine on3 SSLCertificateKeyFile usrlocalapache2confserver key4 SSLCertificateFile usrlocalapache2confserver crt5 6 ltDirectory usrlocalapache2htdocsbezpiecznygt7 SSLRequireSSL8 ltDirectorygt
confextrahttpd-sslconf
Dr inż Stanisław Polak 29 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Instalacja klucza prywatnego oraz tymczasowego certyfikatu
1 utwoacuterz zaszyfrowany w standardzie DES3 klucz prywatny2 openssl genrsa -des3 1024 gt usrlocalapache2confserverkey3 utwoacuterz niezaszyfrowany klucz prywatny4 openssl genrsa 1024 gt usrlocalapache2confserverkey5 chmod 400 usrlocalapache2confserverkey6 utwoacuterz ż ądanie po ś wiadczonego certyfikatu7 openssl req -new -key usrlocalapache2confserverkey -out tmpservercsr8 9 Country Name (2 letter code ) [ AU ] PL
10 State or Province Name ( full name ) [ SomeminusState ] malopolskie11 Locality Name ( eg city ) [ ] Krakow12 Organization Name ( eg company ) [ Internet Widgits Pty Ltd ] Akademia Gorniczo-Hutnicza13 Organizational Unit Name ( eg section ) [ ] EAIiE Katedra Informatyki14 Common Name ( eg YOUR name ) [ ] wwwicsraghedupl15 Email Address [ ] webmastericsraghedupl16 1718 utwoacuterz tymczasowy certyfikat podpisuj ąc go przez samego siebie19 openssl req -x509 -key usrlocalapache2confserverkey -in tmpservercsr -out usrlocalapache2confservercrt -days 36520 rm tmpserver csr
1 openssl s_client minusconnect localhost 4 4 3 minusstate2 GET HTTP 1 03 ltklawisz Entergt4 ltklawisz Entergt
Testowanie połączenia
Dr inż Stanisław Polak 30 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Bezpieczeństwo serwera WWWI Uprawnienia użytkownikaI Prawa dostępu do plikoacutewI Dostęp do katalogoacutew nadrzędnychI Skrypty CGII DziennikiI Identyfikacja serweraI Firewall aplikacyjny bdquoModSecurityrdquo mdash moduł
bdquomod security2rdquoI Przykład metody włamaniahttp[target]indexphpmosConfig_absolute_path=http[attacker]cmdphp
I Strona głoacutewna mdashhttpwwwmodsecurityorg
I RegułyI httpwwwmodsecurityorgprojectscommercialrulesmdash komercyjne firmybdquoTrustwave SpiderLabs
I httpwwwatomicorpcomchannelsasl-20rulesmdash komercyjne firmybdquoAtomicorprdquo
I httpsgithubcomSpiderLabsowasp-modsecurity-crsmdash darmowe
I httpupdatesatomicorpcomchannelsrulesdelayedmdash darmowe
I Graficzny edytor reguł mdashhttpremonetneacom
1 chown minusR root usrlocalapache2
2 chmod minusR u+w usrlocalapache2
3 chmod gominusrx usrlocalapache2logs
4 chmod gominusrx usrlocalapache2conf
1 ltDirectory gt2 Options FollowSymLinks3 AllowOverride None4 Require all denied5 ltDirectorygt
confhttpdconf
1 ltDirectory homelowastpub l i c h tm lgt
2 Opt ions ExecCGI3 4 ltD i r e c t o r ygt
1 ServerTokens Prod2 ServerSignature Off
confextrahttpd-defaultconfDr inż Stanisław Polak 31 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Firewall aplikacyjny bdquoModSecurityrdquoFazy przetwarzania
Dr inż Stanisław Polak 32 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Polecenia SSI
I configI echoI includeI execI fsizeI flastmodI setI printenvI if elif else endif
Dr inż Stanisław Polak 25 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Sterowanie robotami
1 Plik robotstxtI User-AgentI Disallow
2 HTMLI META
rsquoRobotsrsquo
3 Kontrola dostępu
1 Userminusagent lowast2 Disallow
1 lthtmlgt2 ltheadgt3 lttitlegt lttitlegt4 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt5 ltminusminus6 ltMETA NAME=ROBOTS CONTENT=NOINDEX FOLLOWgt7 ltMETA NAME=ROBOTS CONTENT=INDEX NOFOLLOWgt8 ltMETA NAME=ROBOTS CONTENT=NOINDEX NOFOLLOWgt9 minusminusgt
10 ltheadgt11
1 ltLocation notminusindexablegt2 ltIf tolower ( HTTP_USER_AGENT ) =~ robot ||
REMOTE_HOST == rsquobadrobotcomrsquogt3 Require all denied4 ltIfgt5 ltLocationgt
Dr inż Stanisław Polak 26 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Informacje dla robotoacutew
1 ltmeta name=Autor content=Stanisław Polakgt2 ltmeta name=Description content=Strona domowa Stanisława Polakagt3 ltmeta name=Keywords content=XML Java PHP ontologiagt
Dr inż Stanisław Polak 27 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
SSL a serwer Apache
I SSL mdash protokoacuteł zaszyfrowanej komunikacjiI Szyfrowanie z kluczem publicznymI Szyfrowanie przesyłanych informacjiI Uwierzytelnianie serwera
Dr inż Stanisław Polak 28 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Podstawowa konfiguracja protokołu SSL
I configure ndashenable-ssl
1 Listen 4432 SSLEngine on3 SSLCertificateKeyFile usrlocalapache2confserver key4 SSLCertificateFile usrlocalapache2confserver crt5 6 ltDirectory usrlocalapache2htdocsbezpiecznygt7 SSLRequireSSL8 ltDirectorygt
confextrahttpd-sslconf
Dr inż Stanisław Polak 29 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Instalacja klucza prywatnego oraz tymczasowego certyfikatu
1 utwoacuterz zaszyfrowany w standardzie DES3 klucz prywatny2 openssl genrsa -des3 1024 gt usrlocalapache2confserverkey3 utwoacuterz niezaszyfrowany klucz prywatny4 openssl genrsa 1024 gt usrlocalapache2confserverkey5 chmod 400 usrlocalapache2confserverkey6 utwoacuterz ż ądanie po ś wiadczonego certyfikatu7 openssl req -new -key usrlocalapache2confserverkey -out tmpservercsr8 9 Country Name (2 letter code ) [ AU ] PL
10 State or Province Name ( full name ) [ SomeminusState ] malopolskie11 Locality Name ( eg city ) [ ] Krakow12 Organization Name ( eg company ) [ Internet Widgits Pty Ltd ] Akademia Gorniczo-Hutnicza13 Organizational Unit Name ( eg section ) [ ] EAIiE Katedra Informatyki14 Common Name ( eg YOUR name ) [ ] wwwicsraghedupl15 Email Address [ ] webmastericsraghedupl16 1718 utwoacuterz tymczasowy certyfikat podpisuj ąc go przez samego siebie19 openssl req -x509 -key usrlocalapache2confserverkey -in tmpservercsr -out usrlocalapache2confservercrt -days 36520 rm tmpserver csr
1 openssl s_client minusconnect localhost 4 4 3 minusstate2 GET HTTP 1 03 ltklawisz Entergt4 ltklawisz Entergt
Testowanie połączenia
Dr inż Stanisław Polak 30 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Bezpieczeństwo serwera WWWI Uprawnienia użytkownikaI Prawa dostępu do plikoacutewI Dostęp do katalogoacutew nadrzędnychI Skrypty CGII DziennikiI Identyfikacja serweraI Firewall aplikacyjny bdquoModSecurityrdquo mdash moduł
bdquomod security2rdquoI Przykład metody włamaniahttp[target]indexphpmosConfig_absolute_path=http[attacker]cmdphp
I Strona głoacutewna mdashhttpwwwmodsecurityorg
I RegułyI httpwwwmodsecurityorgprojectscommercialrulesmdash komercyjne firmybdquoTrustwave SpiderLabs
I httpwwwatomicorpcomchannelsasl-20rulesmdash komercyjne firmybdquoAtomicorprdquo
I httpsgithubcomSpiderLabsowasp-modsecurity-crsmdash darmowe
I httpupdatesatomicorpcomchannelsrulesdelayedmdash darmowe
I Graficzny edytor reguł mdashhttpremonetneacom
1 chown minusR root usrlocalapache2
2 chmod minusR u+w usrlocalapache2
3 chmod gominusrx usrlocalapache2logs
4 chmod gominusrx usrlocalapache2conf
1 ltDirectory gt2 Options FollowSymLinks3 AllowOverride None4 Require all denied5 ltDirectorygt
confhttpdconf
1 ltDirectory homelowastpub l i c h tm lgt
2 Opt ions ExecCGI3 4 ltD i r e c t o r ygt
1 ServerTokens Prod2 ServerSignature Off
confextrahttpd-defaultconfDr inż Stanisław Polak 31 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Firewall aplikacyjny bdquoModSecurityrdquoFazy przetwarzania
Dr inż Stanisław Polak 32 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Podstawowa konfiguracja protokołu SSL
I configure ndashenable-ssl
1 Listen 4432 SSLEngine on3 SSLCertificateKeyFile usrlocalapache2confserver key4 SSLCertificateFile usrlocalapache2confserver crt5 6 ltDirectory usrlocalapache2htdocsbezpiecznygt7 SSLRequireSSL8 ltDirectorygt
confextrahttpd-sslconf
Dr inż Stanisław Polak 29 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Instalacja klucza prywatnego oraz tymczasowego certyfikatu
1 utwoacuterz zaszyfrowany w standardzie DES3 klucz prywatny2 openssl genrsa -des3 1024 gt usrlocalapache2confserverkey3 utwoacuterz niezaszyfrowany klucz prywatny4 openssl genrsa 1024 gt usrlocalapache2confserverkey5 chmod 400 usrlocalapache2confserverkey6 utwoacuterz ż ądanie po ś wiadczonego certyfikatu7 openssl req -new -key usrlocalapache2confserverkey -out tmpservercsr8 9 Country Name (2 letter code ) [ AU ] PL
10 State or Province Name ( full name ) [ SomeminusState ] malopolskie11 Locality Name ( eg city ) [ ] Krakow12 Organization Name ( eg company ) [ Internet Widgits Pty Ltd ] Akademia Gorniczo-Hutnicza13 Organizational Unit Name ( eg section ) [ ] EAIiE Katedra Informatyki14 Common Name ( eg YOUR name ) [ ] wwwicsraghedupl15 Email Address [ ] webmastericsraghedupl16 1718 utwoacuterz tymczasowy certyfikat podpisuj ąc go przez samego siebie19 openssl req -x509 -key usrlocalapache2confserverkey -in tmpservercsr -out usrlocalapache2confservercrt -days 36520 rm tmpserver csr
1 openssl s_client minusconnect localhost 4 4 3 minusstate2 GET HTTP 1 03 ltklawisz Entergt4 ltklawisz Entergt
Testowanie połączenia
Dr inż Stanisław Polak 30 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
Serwer bdquoApacherdquo Usługa WWW
Bezpieczeństwo serwera WWWI Uprawnienia użytkownikaI Prawa dostępu do plikoacutewI Dostęp do katalogoacutew nadrzędnychI Skrypty CGII DziennikiI Identyfikacja serweraI Firewall aplikacyjny bdquoModSecurityrdquo mdash moduł
bdquomod security2rdquoI Przykład metody włamaniahttp[target]indexphpmosConfig_absolute_path=http[attacker]cmdphp
I Strona głoacutewna mdashhttpwwwmodsecurityorg
I RegułyI httpwwwmodsecurityorgprojectscommercialrulesmdash komercyjne firmybdquoTrustwave SpiderLabs
I httpwwwatomicorpcomchannelsasl-20rulesmdash komercyjne firmybdquoAtomicorprdquo
I httpsgithubcomSpiderLabsowasp-modsecurity-crsmdash darmowe
I httpupdatesatomicorpcomchannelsrulesdelayedmdash darmowe
I Graficzny edytor reguł mdashhttpremonetneacom
1 chown minusR root usrlocalapache2
2 chmod minusR u+w usrlocalapache2
3 chmod gominusrx usrlocalapache2logs
4 chmod gominusrx usrlocalapache2conf
1 ltDirectory gt2 Options FollowSymLinks3 AllowOverride None4 Require all denied5 ltDirectorygt
confhttpdconf
1 ltDirectory homelowastpub l i c h tm lgt
2 Opt ions ExecCGI3 4 ltD i r e c t o r ygt
1 ServerTokens Prod2 ServerSignature Off
confextrahttpd-defaultconfDr inż Stanisław Polak 31 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Firewall aplikacyjny bdquoModSecurityrdquoFazy przetwarzania
Dr inż Stanisław Polak 32 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Serwer bdquoApacherdquo Usługa WWW
Przykładowe reguły
1 Refuse to accep t POST r e q u e s t s t ha t do2 not s p e c i f y r e q u e s t body l e n g t h Do note tha t3 t h i s r u l e shou l d be p receeded by a r u l e t ha t v e r i f i e s4 on l y v a l i d r e q u e s t methods ( e g GET HEAD and POST) a r e used 56 Sk ł adn i a S e cDe f au l tAc t i on akc ja1 akc ja2 akc j a37 SecDefaultAction phase2deny89 Sk ł adn i a SecRule ZMIENNE OPERATOR [AKCJE ]
10 SecRule REQUEST_METHOD ˆPOST$ chain t none11 SecRule REQUEST_HEADERS ContentminusLength ˆ$ t none
Dr inż Stanisław Polak 33 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
CGIOgoacutelny schemat działania
Serwer WWW
Proces
80 443 Przeglądarka WWWGET POST
formularzhtml
Dr inż Stanisław Polak 34 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Co to jest CGI
I CGI (ang Common Gateway Interface) mdash Wspoacutelny interfejs bramyI Interfejs do serwera WWWI Program larrrarr serwer WWW
Dr inż Stanisław Polak 35 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Strategie tworzenia stron dynamicznych
Program generujący dokument HTMLI PerlI RubyI CI C++I
1 2 cout ltlt lth1 gtUżytkownik ltlt login ltlt lth1gt ltlt
endl 3 if ( prawid ł owy ( login ) ampamp prawid ł owe ( has ł o ) )4 cout ltlt Witamyltlt endl 5 else6 cout ltlt Nieprawidłowy login lub hasło ltlt
endl
CGI
Dokument HTML zawierający programI PHPI JSP (Java)I ASP (VBScript C )I
1 lth1gtU ż ytkownik ltphp echo $login gtlth1gt2 ltphp3 4 if ( prawid ł owy ( $login ) ampamp prawid ł owe ( $has ł o ) )
gt5 Witamy6 ltphp else gt7 Nieprawid ł owy login lub has ł o8 ltphp gt
PHP
Dr inż Stanisław Polak 36 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłanie danych z formularza
Zatwierdzanie danych 7minusrarr kodowanie 7minusrarr wysyłanie do serwera WWW
1 ltform method = enctype = a c t i o n=gt2 3 ltformgt4 ltminusminusltform action=mailtoadres e-mailsubject=temat method=POST e n c t y p e=
textplaingt ltformgtminusminusgt
I GETI POST
I applicationx-www-form-urlencoded
I multipartform-data
Dr inż Stanisław Polak 37 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoPrzykład
1 ltform action=http wwwserwercomskryptcgigt2 Login ltinput name=login type=TEXTgtltbrgt3 Has ł o ltinput name=haslo type=PASSWORDgt4 ltformgt
Dokument HTML
Login Jan
Hasło Kowalski (Nowak)
1 login=Janamphaslo=Kowalski+28Nowak29
Zakodowane dane
Dr inż Stanisław Polak 38 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquoapplicationx-www-form-urlencodedrdquoWysyłanie danych
1 ltform action=http wwwserwercomskryptcgi method=gt2 3 ltformgt
1 GET skrypt cgilogin=Janamphaslo=Kowalski+28Nowak29 HTTP 1 0
method=rdquoGETrdquo
1 POST skrypt cgi HTTP 1 02 ContentminusLength 353 ContentminusType applicationxminuswwwminusformminusurlencoded45 login=Janamphaslo=Kowalski+28Nowak29
method=rdquoPOSTrdquo
Dr inż Stanisław Polak 39 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Kodowanie bdquomultipartform-datardquo
1 ltform action= method=POST e n c t y p e=multipartform -datagt2 ltinput name=login type=TEXTgt3 ltinput name=haslo type=PASSWORDgt4 ltinput name=plik type=FILE a c c e p t=imagejpeg imagegifgt5 ltminusminusltinput type=hidden name=MAX_FILE_SIZE value=20000gtminusminusgt6 ltformgt
Jan
Kowalski (Nowak)
obrazjpg
1 POST skrypt cgi HTTP 1 02 ContentminusLength 7753 ContentminusType multipartformminusdata boundary=minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669245 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus81527650181866459910179066926 ContentminusDisposition formminusdata name=login78 Jan9 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
10 ContentminusDisposition formminusdata name=haslo1112 Kowalski ( Nowak )13 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus815276501818664599101790669214 ContentminusDisposition formminusdata name=plik filename=obrazjpg15 ContentminusType imagejpeg16 ContentminusTransferminusEncoding binary1718 Zawarto ś ć pliku obraz jpg19 minusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminusminus8152765018186645991017906692
Dr inż Stanisław Polak 40 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Skrypt CGI mdash otrzymywane dane
I Informacje (poprzez zmienne środowiskowe)I O przeglądarceI O serwerzeI O programie CGI
I Zakodowane dane z formularzyI GET minusrarr zmienna środowiskowaI POST minusrarr stdin
Dr inż Stanisław Polak 41 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przykładowe zmienne środowiskowe
I REQUEST METHODI QUERY STRINGI CONTENT LENGTHI CONTENT TYPE
Dr inż Stanisław Polak 42 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
GET kontra POST
I Metoda bdquoGETrdquoI QUERY STRINGI Limit
I Metoda bdquoPOSTrdquoI stdinI CONTENT LENGTHI Brak limitu
Dr inż Stanisław Polak 43 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGI
1 Wypisanie nagłoacutewkaI Content-typeI LocationI Status
2 Wypisanie danych na stdout
Dr inż Stanisław Polak 44 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Wysyłka danych ze skryptu CGIPrzykład
1 include lti o s t r e a mgt2 using namespace std 3 main ( )4 cout ltlt Content -typetexthtml ltlt endl ltlt
endl 5 cout ltlt lthtml gtnlthead gtn 6 cout ltlt lttitle gtWitaj lttitle gtn 7 cout ltlt lthead gtnltbody gtn 8 cout ltlt lth1gtWitaj lth1 gtn 9 cout ltlt ltbody gtnlthtml gtn
10
bdquoSkryptrdquo CGI w C++
Contentminustype texthtml
lthtmlgtltheadgtlttitlegtWitajlttitlegtltheadgtltbodygtlth1gtWitajlth1gtltbodygtlthtmlgt
Dane wyjściowe
Dr inż Stanisław Polak 45 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Odczytywanie argumentoacutew przekazanych w linii adresu
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] ) 6 cout ltlt Content -typetextplain ltlt endl ltlt endl 7 cout ltlt argc = ltlt argc ltlt endl 8 for ( int i=0 i lt argc i++)9 cout ltlt argv[ ltlt i ltlt ] = ltlt argv [ i ] ltlt endl
10 cout ltlt QUERY_STRING = rsquo ltlt getenv ( QUERY_STRING ) ltlt rsquo ltlt endl 11
bdquoSkryptrdquo CGI w C++
argc = 1argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiQUERY_STRING = rsquo a=1ampb=2ampc=3rsquo
httpadresplskryptcgia=1ampb=2ampc=3
argc = 4argv [ 0 ] = usrlocalapache2htdocs
skrypt cgiargv [ 1 ] = aargv [ 2 ] = bargv [ 3 ] = campdQUERY_STRING = rsquo a+b+campd rsquo
httpadresplskryptcgia+b+campd
Dr inż Stanisław Polak 46 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Przetwarzanie danych zawartych w formularzuOgoacutelny algorytm
Start
$REQUEST METHOD
Odczytaj dane zawartew $QUERY STRING
Odczytaj ze stan-dardowego wejścia$CONTENT LENGTH
bajtoacutew danych
Rozkoduj danezakodowane metodąrsquoapplicationx-www-
form-urlencodedrsquo
Rozkoduj danezakodowane metodą$CONTENT TYPE
GET POST
Dr inż Stanisław Polak 47 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Biblioteki do obsługi CGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIhtmlPython cgipy Standardowa biblioteka Python-
-aRuby cgirb Standardowa biblioteka RubyC CGIC httpwwwboutellcom
cgiccgi-c httpcgi-csourceforge
netC++ CGICC httpwwwgnuorg
softwarecgiccRudeCGI httprudeservercom
cgiparser
Dr inż Stanisław Polak 48 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Śledzenie skryptu CGI
I stderr minusrarr dziennik błędoacutew logserror logsI Z linii komend
1 export REQUEST_METHOD=rsquoGET rsquo2 export QUERY_STRING=rsquopole1=warto ś ć1amppole2=warto ś ć 2 amp rsquo3 usrlocalapache2cgiminusbinskrypt cgi
Dr inż Stanisław Polak 49 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Bezpieczeństwo skryptoacutew CGI
I Skrypt powinienrobić tylko doczego zostałprzeznaczony
I Przeglądarka niepowinna dostawaćwięcej informacjiniż potrzebuje
I Nie wolno ufaćużytkownikowi wkwestiipoprawnościpodawanychinformacji
1 include lts t d i o hgt2 include lts t r i n g hgt3 include lts t d l i b hgt4 char haslo[3]=5 int zalogowany=06 lowast7 lowast Program kt oacute r y pokazu j e s k u t k i p r z epe ł n i e n i a bu fo r a8 lowast Można s i ę za logowa ć n i e z na j ą c has ł a9 lowast
10 main ( )11 12 printf ( Content -typetexthtmlnn ) 13 strcpy(haslogetenv(QUERY STRING))14 printf ( tablica rsquohaslorsquo przechowuje łańcuch ltbgtsltbgtltbrgt haslo )
15 printf ( Wartością zmiennej rsquozalogowany rsquo jest ltbgtdltbgtltbrgt
zalogowany ) 16 if ( strcmp ( haslo aa ) )17 zalogowany=118 if ( zalogowany = 0)19 printf ( ltspan style=rsquobackground -color 00 FF00 rsquogtZostaleś
zalogowany ltspan gt ) 20 else21 printf ( ltspan style=rsquobackground -color FF0000 rsquogtBłędne hasłolt
span gt ) 22
Niebezpieczny bdquoskryptrdquo w C
Dr inż Stanisław Polak 50 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
CGI Usługa WWW
Mechanizmy śledzenia sesji
1 Przepisywanie adresoacutew URL
2 Ukryte pola formularza
3 Ciasteczka
Dr inż Stanisław Polak 51 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiPrzepisywanie adresoacutew URL
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt lta href=rsquoskrypt2cgiidSesji=123rsquogtWyślij
dane ltagt 7
skrypt1cgi
Contentminustype texthtml charset=utfminus8
lta href=rsquo s k r y p t 2 c g i i d S e s j i =123 rsquogtWy ś lij daneltagt
stdout
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
skrypt2cgi
Dr inż Stanisław Polak 52 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiUkryte pola formularza
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl ltlt endl 6 cout ltlt ltform action=rsquoskrypt2cgi rsquogt ltlt endl 7 cout ltlt ltinput type=rsquohiddenrsquo name=rsquoidSesjirsquo
value=rsquo123rsquogt ltlt endl 8 cout ltlt ltinput type=rsquosubmit rsquo value=rsquoWyślij
dane rsquogt ltlt endl 9 cout ltlt ltform gt ltlt endl
10
Contentminustype texthtml charset=utfminus8
ltform action=rsquo s k r y p t 2 c g i rsquogtltinput type=rsquo hidden rsquo name=rsquo i d S e s j i rsquo value= rsquo123 rsquogtltinput type=rsquo submit rsquo value=rsquoWyś l i j dane rsquogtltformgt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
QUERY STRING ) 8
Dr inż Stanisław Polak 53 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Mechanizmy śledzenia sesjiCiasteczka
1 include lti o s t r e a mgt2 using namespace std 34 int main ( )5 cout ltlt Content -typetexthtmlcharset=utf -8
ltlt endl 6 cout ltlt Set-Cookie idSesji=123 ltlt endl ltlt endl 7 cout ltlt lta href=rsquoskrypt2cgi rsquogtWyślij dane ltagt
8
Contentminustype texthtml charset=utfminus8SetminusCookie idSesji=123
lta href=rsquo s k r y p t 2 c g i rsquogtWy ś lij daneltagt
1 include lti o s t r e a mgt2 include lts t d l i b hgt3 using namespace std 45 int main ( int argc char lowastargv [ ] )6 cout ltlt Content -typetextplaincharset=utf -8
ltlt endl ltlt endl 7 cout ltlt Otrzymałem ltlt getenv (
HTTP COOKIE ) 8
Dr inż Stanisław Polak 54 Przedmiot Internet i jego zastosowanie
CGI Usługa WWW
Zalety i wady CGI
ZaletyI ProstotaI Niezależność
I językI architektura
I Izolacja procesoacutewI Możliwość przekazywania
parametroacutew do programoacutewI Nie trzeba modyfikować
przeglądarek
WadyI Mała wydajnośćI Generowanie całości dokumentu
WWWI BezstanowośćI Brak integracji z serwerem
Dr inż Stanisław Polak 55 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
FastCGIOgoacutelny schemat działania
FastCGISerwer WWW
Proces
80 443
Proces
Przeglądarka WWWGET POST
dane
CGISerwer WWW
Proces
80 443 Przeglądarka WWW
GET POSTdane
Dr inż Stanisław Polak 56 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Rodzaje roacutel aplikacji FastCGI
I Respondenty (responders)I Filtry (filters)I Autoryzatory (authorizers)
Dr inż Stanisław Polak 57 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Biblioteki do obsługi FastCGI
Język programowania Nazwa biblioteki URLPerl CGIpm httpperldocperlorg
CGIFasthtmlFCGI httpsearchcpanorg
~skimoFCGI-067Python python-fastcgi httpspypipythonorg
pypipython-fastcgiRuby Ruby-fcgi httpsrubyforgeorg
projectsfcgiC Fastcgi httpwwwfastcgicom
distfcgitargzC++ Fastcgi++ httpwwwnongnuorg
fastcgipp
Dr inż Stanisław Polak 58 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Obsługa protokołu FastCGI przy użyciu serwera Apache
Moduł bdquomod fastcgirdquoI Stworzony przez Open Market ale
obecnie nie jest już rozwijanyI Źroacutedła httpwwwfastcgicomdistmod_fastcgi-currenttargz
I Kategorie aplikacjiI DynamiczneI StatyczneI Zewnętrzne
I Zarządzanie aplikacjamiI Dynamiczne oraz statyczne mdash
menedżer procesoacutew rsquofcgi-pmrsquoI Zewnętrzne mdash program rsquocgi-fcgirsquo
Moduł bdquomod fcgidrdquoI Rozwijany przez ApacheI Strona modułu httphttpdapacheorgmod_fcgid
1 ltIfModule mod_fcgid cgt2 Je ż e l i bę dziemy ko r z y s t a ć z b i b l i o t e k d l a C lub C
++3 FcgidInitialEnv LD_LIBRARY_PATH ś cie żkadoplikuz
bibliotek ąFastCGI4 Alias fcgiminusbin ś cie żkadokatalogufcgiminusbin56 ltDirectory ś cie żkadokatalogufcgiminusbingt7 AllowOverride None8 Options None9 Require all granted
10 SetHandler fcgidminusscript11 Options +ExecCGI12 ltDirectorygt1314 ltIfModulegt1516
confextrahttpd-fcgidconf
Moduł bdquo mod proxy fcgirdquoI Standardowy moduł Apachersquoa począwszy od wersji 24I Umożliwia komunikację z zewnętrznymi aplikacjami FastCGII Uruchamianie aplikacji FastCGI mdash za pomocą programu rsquofcgistarterrsquo
Dr inż Stanisław Polak 59 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Przykładowe skrypty FastCGI
1 include lt f c g i s t d i o hgt lowast b i b l i o t e k af c g i powinna by ć do ł ą czona j akop i e rw s z alowast
2 include lts t d i o hgt3 include lts t d l i b hgt4 int count 5 void initialize ( void ) 6 count=07 8 void main ( void ) 9 lowast I n i c j a l i z a c j a lowast
10 initialize ( ) 11 lowast Pę t l a odpow iedz i lowast12 while ( FCGI_Accept ( ) gt= 0) 13 printf ( Content -type texthtmlrn
rn14 lttitle gtFastCGI Hello (C
fcgi_stdio library)lttitle gt15 lth1gtFastCGI Hello (C fcgi_stdio
library)lth1 gt16 Request number d running on host lt
igtsltigtn 17 ++count getenv ( SERVER_NAME ) ) 18 19
bdquoSkryptrdquo FastCGI w C
1 u s r b i n p e r l2 use CGI Fast qw ( standard ) 3 I n i c j a l i z a c j a4 my $count = 0 5 my $lives = 1 0 0 0 ż y j e p r z e z 1000 ż ąda
ń potem koń czy d z i a ł a n i e6 Pę t l a odpow iedz i 7 while ( my $q = CGI Fastminusgtnew ) 8 print header 9 print start_html ( FastCGI Hello (Perl
) ) 10 Request number ++$count 11 running on host 12 i ( $ENVSERVER_NAME) 13 print end_html 1415 last unless $livesminusminus l i c z n i k czasu ż
y c i a16 last if minusM $ENVSCRIPT_FILENAME lt 0
sprawdzen i e czasu mod y f i k a c j ip l i k u
17
Skrypt FastCGI w Perl-u
Dr inż Stanisław Polak 60 Przedmiot Internet i jego zastosowanieMat
eriał
ydla
studen
toacutew
Infor
mat
yki W
SZiBw
Krako
wie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Wydajność CGI i FastCGI
Plik statyczny FastCGI CGI21ms + 019ms na KB 22ms + 028ms na KB 59ms + 037ms na KB
ZałożeniaI Czas inicjacji połączenia z BD = 50msI Ilość generowanych danych wyjściowych = 5KB
WynikiI CGI 59ms + 50ms + (037ms)(5) = 111msI FastCGI 22ms + (028ms)(5) = 23ms
Dr inż Stanisław Polak 61 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Zalety i wady FastCGI
ZaletyI Elastyczność CGII WydajnośćI Trwałość procesoacutew obsługa wielu klientoacutewI Kompatybilność z CGII Tryb CGII NiezależnośćI Izolacja procesoacutewI Możliwość przetwarzania rozproszonegoI Proces FastCGI pracujący na innym węźleI Prosta migracja
WadyI Konieczność rekonfiguracji serwera
Dr inż Stanisław Polak 62 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
SCGI
I Simple Common Gateway InterfaceI Podobny do FastCGI ale łatwiejszy do implementacji
Dr inż Stanisław Polak 63 Przedmiot Internet i jego zastosowanie
FastCGI Usługa WWW
Interfejsy wysokopoziomowePerl Web Server Gateway Interface
1 my $app = sub 2 my $env = shift 3 return [4 rsquo200rsquo 5 [ rsquoContent -Typersquo =gt rsquotextplainrsquo ] 6 [ Hello World ]7 ] 8
Perl
Web Server Gateway Interface
1 def simple_app ( environ start_response ) 2 start_response ( rsquo200 OKrsquo [ ( rsquoContent -Typersquo rsquotextplainrsquo ) ] )3 return [ rsquoHello Worldnrsquo ]
Python
Rack
1 class HelloWorld2 def call ( env )3 return [ 2 0 0 rsquoContent -Typersquo =gt rsquotextplainrsquo [ Hello world ] ]4 end5 end
Ruby
Dr inż Stanisław Polak 64 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła I
I Mark R BrownFastCGI Developerrsquos Kit httpwwwfastcgicomdevkitdocfcgi-devel-kithtm
I The Apache Software FoundationApache HTTP Server Version 22 Documentationhttphttpdapacheorgdocs22
I Steve KrugNie każ mi myśleć O życiowym podejściu do funkcjonalności stron internetowych
Helion wydanie drugie 2006
I NetcraftSeptember 2010 Web Server Surveyhttpnewsnetcraftcom
I Inc Open MarketFastCGI A High-Performance Web Server Interfacehttpwwwfastcgicomdevkitdocfastcgi-whitepaperfastcgihtm
Dr inż Stanisław Polak 65 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła II
I Jarosław RafaGopher umarły świstakhttpwwwwspkrakowplpapersgopherhtml
I Jarosław RafaHyper-G - zapomniany następca WWWhttpwwwwspkrakowplpapershyperghtml
I Breach SecurityModSecurity Reference Manualhttpwwwmodsecurityorgdocumentation
I Cezary SobaniecCommon Gateway Interfacehttpskisrcsputpoznanplsemestr8psiilecpsii_wyklad3_cgipdf
I Tomasz TraczykXFormshttpwwwplougorgplkonf_08materialypdf03_Traczykpdf
Dr inż Stanisław Polak 66 Przedmiot Internet i jego zastosowanie
Źroacutedła Usługa WWW
Źroacutedła III
I Peter WainwrightApache 20 dla zaawansowanychHelion 2004
Dr inż Stanisław Polak 67 Przedmiot Internet i jego zastosowanie