1 Aplikacje WWW Prowadzący: Dr inż. Tomasz Molik Materiały dostępne na stronie: http://bazy.kil.swspiz.pl/~moliktom/ Hasło:...........
2 Przekazywanie parametrów żądania HTTP Często w przypadku gdy żądanie klienta HTTP dotyczy uruchomienia aplikacji znajdującej się po stronie serwera HTTP, klient HTTP przekazuje parametry wywołania takiej aplikacji. Parametry wywołania mogą być przekazane za pośrednictwem protokołu HTTP na dwa sposoby: 1. Rozkaz GET, parametry dołączone do adresu URL skojarzonego z aplikacją. 2. Rozkaz POST, parametry przekazywane w ciele żądania HTTP. Na slajdzie przedstawiono obie metody przekazywania parametrów wywołania aplikacji znajdującej się po stronie serwera HTTP. W pierwszym przypadku zależnie od klienta HTTP zwykle istnieje ograniczenie na łączny rozmiar łańcucha znakowego zawierającego parametry żądania HTTP. W drugim przypadku rozmiary parametrów nie są ograniczone.
3 Uwierzytelnianie w HTTP – Basic Authentication Nie wszystkie dokumenty zgromadzone po stronie serwera HTTP powinny być udostępniane każdemu użytkownikowi. Jedną z najprostszych metod ochrony dostępu jest uwierzytelnianie użytkowników za pomocą nazwy i hasła. Protokół HTTP obsługuje prostą metodę uwierzytelniania użytkowników nazwaną Basic Authentication. Jeżeli serwer HTTP wymaga uwierzytelnienia użytkownika, wtedy odpowiedź na żądanie HTTP zawiera kod zwrotny 401 (Authorization Required), oznaczający, że klient HTTP powinien zażądać od użytkownika wprowadzenia nazwy i hasła. W takiej sytuacji klient HTTP pobiera od użytkownika jego nazwę i hasło, łączy je w jeden łańcuch znakowy, koduje za pomocą algorytmu Base64, a następnie zapisuje w polu nagłówka Authorization ponowionego żądania HTTP. Jeżeli wynik weryfikacji nazwy/hasła użytkownika przez serwer HTTP jest negatywny, serwer HTTP ponownie przesyła kod zwrotny 401 (Authorization Required) – aż do skutku. Wprowadzone przez użytkownika dane uwierzytelniające są przez klienta HTTP automatycznie dołączane do kolejnych żądań HTTP. Należy zauważyć, że metoda HTTP Basic Authentication nie zapewnia ochrony przekazywanych danych uwierzytelniających. Kodowanie Base64 jest odwracalne, dzięki czemu ewentualny podsłuch połączenia HTTP umożliwia intruzowi przejęcie nazwy i hasła użytkownika. Pewniejsze metody uwierzytelniania użytkowników opierają się na formularzach HTML, których dane są przekazywane za pośrednictwem szyfrowanego protokołu HTTPS.
4 HTTPS Wadą podstawowego protokołu HTTP jest brak zabezpieczenia poufności komunikacji pomiędzy klientem HTTP a serwerem HTTP. Komendy, parametry, dane z formularzy, zmienne Cookie i dokumenty są przesyłane w postaci czytelnego tekstu. Hasła uwierzytelniające są kodowane w prymitywny sposób. W celu zapewnienia bezpieczeństwa komunikacji w środowisku WWW powszechnie stosuje się protokół HTTPS, który w przeciwieństwie do HTTP, opartego bezpośrednio na TCP, wykorzystuje warstwę komunikacyjną SSL. SSL obsługuje szyfrowanie transmisji, kontrolę jej integralności oraz uwierzytelnianie serwera, a opcjonalnie także klienta. Dzięki temu komunikaty żądań HTTP i odpowiedzi HTTP nie są narażone na łatwy podsłuch lub ingerencję osób trzecich. Podczas nawiązywania połączenia HTTPS klient HTTP otrzymuje od serwera HTTP certyfikat klucza publicznego, na podstawie którego potwierdza się tożsamość serwera HTTP. Aby certyfikat ten został uznany przez klienta HTTP, wystawiający go urząd certyfikacyjny powinien zostać uprzednio zarejestrowany w aplikacji klienta HTTP. W przeciwnym razie certyfikat serwera HTTP będzie uznany za nielegalny.
5 HTTPS W pewnym uproszczeniu, połączenie HTTPS przebiega w następujących krokach: 1. Klient HTTP wysyła do serwera HTTP sygnał otwarcia połączenia SSL. W tym celu użytkownik końcowy posługuje się symbolem "https" (zamiast "http") w adresie URL. 2. Serwer HTTP wysyła do klienta HTTP swój certyfikat klucza publicznego, stanowiący poświadczenie tożsamości serwera. 3. Klient HTTP dokonuje weryfikacji otrzymanego certyfikatu: czy nazwa właściciela zgadza się z nazwą DNS serwera HTTP? czy wystawca certyfikatu należy do zbioru zaufanych urzędów certyfikacyjnych? czy data ważności certyfikatu nie wygasła? Jeżeli wynik weryfikacji certyfikatu jest negatywny, aplikacja klienta HTTP zwraca się do użytkownika końcowego z pytaniem o kontynuowanie połączenia. 4. Klient HTTP wymienia z serwerem HTTP klucz szyfrujący. 5. Klient HTTP szyfruje komunikat żądania HTTP i przesyła go do serwera HTTP. 6. Serwer HTTP szyfruje komunikat odpowiedzi HTTP i przesyła go do klienta HTTP. Połączenie jest zamykane.
6 Zmienne Cookies Protokół HTTP został zaprojektowany jako bezstanowy, co oznacza, że serwer HTTP nie potrafi rozpoznać czy określone żądania HTTP pochodzą od tego samego użytkownika końcowego, czy od użytkowników niezależnych. Ponieważ wiele zastosowań aplikacyjnych wymaga korelowania żądań HTTP, dlatego zaproponowano rozszerzenie funkcjonalności protokołu o obsługę niewielkich zmiennych o czasie życia dłuższym od czasu trwania połączenia HTTP. Zmienne te nazwano Cookies. Zmienna Cookie jest powoływana do życia przez aplikację pracującą po stronie serwera HTTP, a następnie przesyłana do klienta HTTP. Zadaniem klienta HTTP jest przechować tę zmienną, a następnie wysyłać ją do serwera HTTP wraz z kolejnymi żądaniami HTTP. Dzięki temu serwer HTTP ma możliwość tymczasowego przechowywania zmiennych w pamięci klienta HTTP, a co się z tym wiąże, podtrzymywać stan aplikacji obsługującej klienta. Każda zmienna Cookie posiada nazwę, wartość będącą łańcuchem znakowym, wartość, czas życia określający jak długo klient HTTP powinien ją przechowywać, oraz zasięg rozumiany jako dziedzinę adresów URL (domena+ścieżka), którym zmienna ta będzie udostępniana. Jeżeli czas życia zmiennej Cookie wynosi 0, to zmienna jest przechowywana do momentu zamknięcia przeglądarki. Zmienne Cookies są zapisywana na dysku przez klienta HTTP.
7 Zmienne Cookies Przesyłanie Cookies pomiędzy klientem a serwerem HTTP przebiega następująco: 1. Klient HTTP wysyła do serwera HTTP żądanie uruchomienia aplikacji. 2. Serwer HTTP wysyła do klienta HTTP odpowiedź wygenerowaną przez aplikację. W nagłówku odpowiedzi HTTP znajduje się pole Set-Cookie, zawierające m.in. nazwę i wartość zmiennej Cookie: v1=ABC. Przekazywane zmienne oddzielone są średnikiem. 3. Klient HTTP pobiera zmienną Cookie z otrzymanego nagłówka odpowiedzi HTTP i zapisuje na dysku lokalnym. 4. Podczas wysyłania każdego następnego żądania HTTP klient umieszcza w jego nagłówku pole Cookie, zawierające nazwę i wartość zmiennej Cookie. W ten sposób zmienna powraca do serwera HTTP i może być wykorzystywana przez jego aplikacje.
8 Buforowanie dokumentów W celu skrócenia czasu odpowiedzi na żądanie użytkownika, a także w celu redukcji obciążenia serwerów HTTP i łączy, klient HTTP buforuje pobierane dokumenty na dysku i wykorzystuje je do uproszczonej obsługi nowych żądań. Gdy użytkownik formułuje nowe żądanie, bufor ten jest przeszukiwany w celu znalezienia kopii żądanego dokumentu. Jeżeli taka kopia zostanie znaleziona, klient HTTP rezygnuje z połączenia z serwerem HTTP i natychmiast przedstawia posiadaną kopię użytkownikowi. Ten rodzaj buforowania stwarza zagrożenie, iż kopia dokumentu znajdująca się w buforze nie jest już identyczna z oryginalnym dokumentem znajdującym się po stronie serwera HTTP, który mógł ulec modyfikacjom. Aby uniknąć ryzyka niespójności, klient HTTP stosuje jeden z algorytmów kontroli spójności bufora: 1. Kopie dokumentów są przechowywane w buforze wyłącznie przez czas ważności zadeklarowany przez serwer HTTP. 2. Klient HTTP każdorazowo odpytuje serwer HTTP, czy kopia dokumentu utworzona w podanym momencie czasowym jest nadal identyczna z oryginałem. 3. Klient HTTP każdorazowo odpytuje serwer HTTP, czy identyfikator wersji kopii dokumentu jest nadal identyczny z identyfikatorem wersji oryginału.
9 Formularze HTML Formularz HTML jest fragmentem dokumentu HTML zawierającym kontrolki umożliwiające wprowadzanie danych. Formularz HTML jest de facto jedynym mechanizmem umożliwiającym użytkownikowi przekazanie danych do aplikacji internetowej. Dane przekazywane z formularza mogą mieć różne zastosowanie, mogą to być np. kryteria wyszukiwania przekazane do wyszukiwarki, dane osobowe rejestrowane w formularzu zgłoszeniowym, czy numer konta i hasło podawane podczas logowania do banku internetowego. Kontrolki umieszczane w formularzach HTML obejmują: pola tekstowe, pola haseł, pola wyboru, listy rozwijane i przyciski. Dodatkowo, formularz może zawierać pola ukryte. Dzięki bogatemu zestawowi kontrolek użytkownik wprowadza dane w sposób przypominający pracę z tradycyjnymi aplikacjami. Formularz przesyła dane wprowadzone przez użytkownika do aplikacji działającej po stronie serwera HTTP. W zależności od wybranej metody przesłania formularza dane mogą być jeszcze dodatkowo zakodowane za pomocą kodowania URL (ang. URL-encoding).
10 Formularze HTML – przykład
11 Elementy formularza w HTML Cała zawartość formularza jest ujęta w znaczniki.... Najczęściej do konstruowania elementów formularza wykorzystujemy znacznik. W zależności od wartości atrybutu type możemy utworzyć następujące elementy formularza: type="text": pole tekstowe type="radio": element grupy przycisków radiowych, do jednej grupy trafiają wszystkie przyciski o tej samej wartości atrybutu name type="password": pole z hasłem, znaki wpisywane do pola nie są widoczne type="checkbox": pole wyboru type="file": pole służące do wyboru pliku i jego wysłania na serwer type="submit": przycisk służący do wysyłania formularza type="reset": przycisk służący do czyszczenia zawartości formularza type="button": przycisk type="image": graficzny przycisk wysłania formularza Oprócz znacznika elementy formularza można również utworzyć za pomocą następujących znaczników: : tworzy pole tekstowe typu memo o podanej liczbie wierszy i kolumn : tworzy listę rozwijaną, kolejne pozycje na liście są tworzone za pomocą znaczników : tworzy element ukryty, który nie jest wyświetlany w formularzu
12 Atrybuty elementów formularza w HTML Wygląd i zachowanie formularza można modyfikować za pomocą atrybutów elementów formularza. Do najczęściej używanych atrybutów należą: name: nazwa elementu formularza, wymagany dla wszystkich elementów poza przyciskami typu submit i reset value: dla pól tekstowych i pól z hasłami zawiera domyślną wartość pola, dla przycisków zawiera etykietę przycisku, dla pól wyboru i przycisków radiowych zawiera wartość elementu przesyłaną do aplikacji size: rozmiar elementu readonly: flaga oznaczająca, czy dany element może być modyfikowany checked: flaga oznaczająca, czy dany element jest początkowo wyświetlony jako zaznaczony (dotyczy przycisków radiowych i pól wyboru), np. checked="checked" disabled: element wyłączony, np. disabled="disabled"
13 Wysłanie formularza Atrybut action znacznika określa adres URI (ang. Uniform Resource Identifier) serwera/skryptu, który zajmie się przetwarzaniem danych wysłanych z formularza. Zawartość formularza jest przesyłana za pomocą protokołu HTTP do serwera HTTP i tam przetwarzana. Dane z formularza mogą być przesłane wg. jednej z dwóch metod: method="GET": dane są kodowane w postaci łańcucha znaków i doklejane do adresu URL podanego w atrybucie action w postaci par: nazwa atrybutu=wartość atrybutu, poszczególne atrybuty są odseparowane od siebie znakiem &, a spacje są reprezentowane przez znak +, np. http://domain.com/form.cgi?osoba=Mikolaj+Morzy&miasto=New+York method="POST": dane są przesyłane wewnątrz komunikatu protokołu HTTP
14 PHP PHP (ang. Hypertext Preprocessor) to język skryptowy ogólnego przeznaczenia, ale opracowany z myślą o aplikacjach WWW do dynamicznej generacji stron WWW po stronie serwera. PHP jest bardzo łatwy do opanowania w stopniu umożliwiającym tworzenie rzeczywistych aplikacji. Stąd m.in. jego bardzo duża popularność. Składnia PHP przypomina składnię języka C z elementami Perla. PHP jest szybki i oszczędza zasoby serwera. Jest szczególnie popularny w systemie Linux, w połączeniu z serwerem HTTP Apache, ale dostępny jest dla wielu systemów operacyjnych (w tym MS Windows) i serwerów HTTP. PHP jest rozwijany na zasadach Open Source. Jest darmowy, rozszerzalny, pojawiające się w nim błędy są szybko wykrywane i poprawiane. Wsparcie, rozwiązania typowych problemów i przykłady kodu można bez problemu znaleźć w Internecie.
15 PHP PHP jest językiem zaprojektowanym z myślą o zagnieżdżaniu w HTML. Przejście do trybu PHP jest określane jako wyskakiwanie z HTML. Cztery sposoby wyskakiwania z HTML zilustrowane na slajdzie: 1. Podstawowy i zalecany sposób zagnieżdżania kodu PHP. 2. Sposób, który umożliwia pracę z edytorami HTML, które nie wspierają PHP. 3. Składnia z krótkim znacznikiem otwierającym. Nie może być stosowana przy generacji dokumentów XML i XHTML ze względu na kolizję z instrukcjami przetwarzania XML. 4. Składnia wypisująca wartość zmiennej. Dwa pierwsze sposoby zagnieżdżania kodu PHP w HTML są zawsze automatycznie dostępne. Dwa ostatnie trzeba jawnie uaktywnić w pliku konfiguracyjnym PHP (php.ini).
16 PHP Serwer HTTP otrzymując żądanie, odwołujące się do pliku o rozszerzeniu.php wskazującym, że jest to dokument PHP, zleca przetworzenie tego pliku modułowi PHP. PHP przetwarzając plik, w niezmienionej postaci wysyła na wyjście kod HTML, a po napotkaniu znacznika przejścia w tryb PHP interpretuje zagnieżdżone instrukcje PHP. W przypadku przykładowego dokumentu test.php, w trybie PHP funkcją echo() wypisany na wyjście jest tekst Hi. PHP works!. Z prawej strony pokazany jest fragment dokumentu PHP w pełni ilustrujący swobodę przeplatania kodu HTML i PHP. W blokach kodu instrukcji if PHP następuje powrót do trybu HTML. Taki przeplot jest poprawny, ponieważ PHP traktuje tekst pomiędzy ?> i