mariusz@math.uwb.edu.pl http://math.uwb.edu.pl/~mariusz Uniwersytet w Białymstoku 2018/2019
Serwer HTTP Najbardziej popularne serwery HTTP: Apache nginx Microsoft IIS Lite Speed GWS Google Statystyki Netcraft: February 2019 Web Server Survey W 3 Techs: Usage of web servers for websites, 14 March 2019 Porównanie: Wikipedia: Comparison of web server software
Apache Modularna budowa (Loadable Dynamic Modules) (w tym PHP, Perl) Różne tryby przetwarzania żądań (Multiple Request Processing) Skalowalność Automatyczne indeksowanie, negocjacja zawartości Obsługa.htaccess Obsługa SSL/TLS Wirtualne hosty (według nazwy lub adresu IP) Rozbudowana autentykacja, autoryzacja i kontrola dostępu Kompresja i dekompresja zawartości Obsługa CGI
Ciasteczka Protokół HTTP jest bezstanowy, serwer nie zachowuje żadnej informacji o wcześniejszych żądaniach klienta Mechanizm cookies został wprowadzony przez Netscape by utrzymywać stan nawiązanego połączenia HTTP Użytkownik może wyłączyć mechanizm cookies w przeglądarce
Ciasteczka odpowiedź serwera HTTP Set-Cookie: <name>=<value>; Expires=<date>; Max-Age=<age>; Domain=<domain>; Path=<path>; Secure; HttpOnly <name> nazwa ciasteczka <value> wartość ciasteczka Expires data i czas kiedy ciasteczko wygasa, brak oznacza, że ciasteczko wygasa z końcem sesji, czyli po zamknięciu klienta Max-Age czas życia ciasteczka określony w sekundach, wartość ma wyższy priorytet od Expires Domain określa hosty, do których ciasteczko zostanie wysłane, domyślnie host bieżącego dokumentu Path określa sieżkę jaka ma być podana w URL żądania, aby ciasteczko zostało wysłane Secure ciasteczko będzie wysłane wyłącznie w protokole HTTPS HttpOnly ciasteczko nie jest dostępne dla JavaScript
Ciasteczka żądanie klienta HTTP Cookie: <name>=<value>; <name> nazwa ciasteczka <value> wartość ciasteczka
Ciasteczka przykłady Żądanie klienta GET /~mariusz/pwi/cookies.php HTTP/1.1 Host: math.uwb.edu.pl Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Odpowiedź serwera (tylko nagłówki) HTTP/1.1 200 OK Date: Mon, 11 Mar 2019 21:38:59 GMT Set-Cookie: ciasteczko=pychota; expires=mon, 11-Mar-2019 21:43:59 GMT; Content-Length: 60 Content-Type: text/html; charset=iso-8859-2 Kolejne żądanie klienta GET /~mariusz/pwi/cookies.php HTTP/1.1 Host: math.uwb.edu.pl Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Cookie: ciasteczko=pychota
Ciasteczka dla programistów PHP bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = FALSE [, bool $httponly = FALSE ]]]]]] ) bool setcookie ( string $name [, string $value = "" [, array $options = [] ]] ) JavaScript zapis document.cookie = "ciasteczko=pychota; Max-Age=300"; document.cookie = "session-id=1234567; Max-Age=600"; odczyt alert(document.cookie) --> ciasteczko=pychota;session-id=1234567
Ciasteczka a Web Storage Ciasteczka Web Storage Implementacja HTTP JavaScript Realizacja klient-serwer klient Dozwolony rozmiar 4KB 5MB Typy danych klucz-wartość tablice asocjacyjne
Sesje Sesja HTTP seria powiązanych ze sobą żądań klienta i odpowiedzi serwera. Podstawą sesji jest identyfikacja klienta przez serwer. Identyfikacja klienta może być realizowana na 3 różne sposoby: Ciasteczka Set-Cookie: SID=1234567 Nadpisywanie URL (URL rewriting) http://example.org/shopping.php?sid=1234567 Ukryte pola formularza HTML <form method="post" action="url"> <input type="hidden" name="sid" value="1234567">... <input type="submit"> </form>
Sesje w PHP Parametry - ciasteczka ini_set( session.use_cookies, 1); ini_set( session.use_only_cookies, 1); Parametry - nadpisywanie URL ini_set( session.use_trans_sid, 1); Zarządzanie sesją session_name( SessionID ); session_id(rand(1000, 2000)); session_start(); session_create_id( PFX ); session_get_cookie_params(); session_set_cookie_params(600, warehouse/sale, example.org ); session_status(); session_destroy(); echo SID; $_SESSION[ name ] = Yellow Submarine ; $_SESSION[ object ] = new SessionManagement(SID); echo $_SESSION[ name ];
Autentykacja, autoryzacja, kontrola dostępu Autentykacja Sprawdzenie, czy użytkownik jest tym za kogo się podaje. Zwykle tożsamość użytkownika ustala się na podstawie jego nazwy i hasła. Autoryzacja Poprzedzona jest autentykacją. Określenie, czy dany użytkownik ma uprawnienia do żądanego zasobu. Różni użytkownicy mogę mieć odmienne prawa do tego samego zasobu. Kontrola dostępu Oparta wyłącznie na autentykacji to autoryzacja. Zwykle zawiera wiele innych kryteriów, np.: adres IP, rodzaj przeglądarki, porę dnia itp.
Basic Authentication Mechanizm autentykacji na poziomie HTTP Mechanizm wbudowany do serwera Apache Użytkownik jest identyfikowany na podstawie jego nazwy i hasła Aby ułatwić zarządzania możliwe jest grupowanie użytkowników Zakodowane hasła przechowywane są w plikach na serwerze Nazwa użytkownika i hasło przesyłane są jako tekst w kodzie Base64 Łatwo można odczytać przekazywane siecią hasło
Basic Authentication - konfiguracja Tworzymy plik z hasłami i dodajemy użytkownika math$ htpasswd -c /export/home/mariusz/.pwipasswd admin New password: Re-type new password: Adding password for user admin Hasła w utworzonym pliku są zakodowane math$ cat /export/home/mariusz/.pwipasswd admin:$apr1$uaw6kljz$czqb9o5cc4axeurt11ahk0 W chronionym katalogu tworzymy plik.htaccess AuthType Basic AuthName "" AuthUserFile /export/home/mariusz/.pwipasswd require user admin satisfy all
Basic Authentication - jak to działa? Żądanie klienta GET /~mariusz/pwi/sekret/ HTTP/1.1 Host: math.uwb.edu.pl User-Agent: Mozilla/5.0 (X11; SunOS i86pc; rv:45.0) Gecko/20100101 Odpowiedź serwera (tylko nagłówki) HTTP/1.1 401 Unauthorized Date: Wed, 13 Mar 2019 08:12:22 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.35 OpenSSL/1.0.2n WWW-Authenticate: Basic realm="" Kolejne żądanie klienta GET /~mariusz/pwi/sekret/ HTTP/1.1 Host: math.uwb.edu.pl User-Agent: Mozilla/5.0 (X11; SunOS i86pc; rv:45.0) Gecko/20100101 Authorization: Basic YWRtaW46YWJjMTIz
Digest Authentication Mechanizm autentykacji na poziomie HTTP Mechanizm wbudowany do serwera Apache Użytkownik jest identyfikowany na podstawie jego nazwy i hasła Aby ułatwić zarządzania możliwe jest grupowanie użytkowników Zakodowane hasła przechowywane są w plikach na serwerze Nazwa użytkownika i hasło przesyłane są jako MD5 hash Odczytanie przekazywanego siecią hasła jest niemożliwe
Digest Authentication - konfiguracja Tworzymy plik z hasłami i dodajemy użytkownika math$ htdigest -c /export/home/mariusz/.pwidigest \ "" admin Adding password for admin in realm PWI. New password: Re-type new password: Hasła w utworzonym pliku są zakodowane math$ cat /export/home/mariusz/.pwidigest admin:pwi:2d4d40bb69aeb7b37ce02178c0a5e1d4 W chronionym katalogu tworzymy plik.htaccess AuthType Digest AuthName "" AuthUserFile /export/home/mariusz/.pwidigest require user admin satisfy all
Digest Authentication - jak to działa? Żądanie klienta GET /~mariusz/pwi/sekret/ HTTP/1.1 Host: math.uwb.edu.pl User-Agent: Mozilla/5.0 (X11; SunOS i86pc; rv:45.0) Gecko/20100101 Odpowiedź serwera (tylko nagłówki) HTTP/1.1 401 Unauthorized Date: Wed, 13 Mar 2019 09:03:53 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.35 OpenSSL/1.0.2n WWW-Authenticate: Digest realm="", nonce="5f7affadbqa=df1b8a23925ca52c5325c1f63274e9f40dfe7b79", algorithm=md5, qop="auth" Kolejne żądanie klienta GET /~mariusz/pwi/sekret/ HTTP/1.1 Host: math.uwb.edu.pl User-Agent: Mozilla/5.0 (X11; SunOS i86pc; rv:45.0) Gecko/20100101 Authorization: Digest username="admin", realm="", nonce="5f7affadbqa=df1b8a23925ca52c5325c1f63274e9f40dfe7b79", uri="/~mariusz/pwi/sekret/", algorithm=md5, response="cafe8f2f33c3858e019d42b66ed91419", qop=auth, nc=00000001, cnonce="deed038837005329"
FIN ACK