[ Pobierz całość w formacie PDF ]
.3.pokazana jest strona bezpośrednio o dodaniu użytkownika scott.Jak mówiliśmywcześniej, skrypt ten nie jest kompletnym narzędziem zarządzającym użytkownikami, a jedynie pokazuje sposóbwykorzystania klasy Htpasswd.Można również skorzystać z dostarczanej przez The Webmasters Net klasyHtgroup do tworzenia i zarządzania grupami użytkowników.Rysunek 8.3.Programzarządzającyużytkownikamiw działaniuPodstawowe uwierzytelnianie za pomocą PHPPoprzednie dwie części opisywały podstawowe uwierzytelnianie serwera Apache do ochrony fragmentówwitryny WWW (zwykle katalogów).W niektórych przypadkach może być wymagane zabezpieczenie tylkoniektórych stron aplikacji lub nie jest możliwa modyfikacja odpowiednich plików na serwerze WWW.W takimprzypadku możesz wykorzystać PHP do wysyłania odpowiednich nagłówków do serwera i w ten sposóbbezpośrednio żądać autoryzacji.PHP Kompendium wiedzy99Tak jak w przypadku wysyłania innych danych nagłówka, należy albo wysyłać dane nagłówków przedwysłaniem jakichkolwiek danych strony, albo korzystać z buforowania wyjścia.Na wydruku 8.8 zamieszczonyjest prosty skrypt żądający autoryzacji.Skrypt ten jest w postaci pliku dołączanego, auth_include.inc, więc będziego można łatwo dodawać do wszystkich stron wymagających autoryzacji.Wydruk 8.8.Skrypt auth_include.phpSkrypt ten na początku pracy sprawdza, czy ustawiona jest zmienna $PHP_AUTH_USER.Jeżeli tak, towartości zmiennych $PHP_AUTH_USER i $PHP_AUTH_PW są porównywane z prawidłową nazwą użytkownika i hasłemaplikacji.Jeżeli sprawdzenie to się powiedzie, nie ma potrzeby wysyłania do przeglądarki nagłówka autoryzacji.Jeżeli porównanie nie uda się skrypt wysyła do przeglądarki nagłówek HTTP 401, który powoduje wyświetlenieokna autoryzacji.Proces ten jest powtarzany aż do podania właściwych danych autoryzacji, albo do przerwaniauwierzytelniania przez użytkownika.Dołączenie tego pliku na początku dowolnego skryptu powodujekonieczność autoryzacji użytkownika skryptu.Prawdziwy system uwierzytelniania nie powinien mieć zaszytych nazw użytkowników i haseł w samymskrypcie.Zamiast tego należy wykorzystać bazę danych lub usługę katalogową (na przykład LDAP) lub nawetpliki zawierające dane uwierzytelniania.Jedną z zalet takiego podejścia jest możliwość odwołania uwierzytelnienia użytkownika poprzez ponownewysłanie nagłówka HTTP 401.Można to wykorzystać do ponownego logowania użytkownika po określonymczasie bezczynności lub do chronienia różnymi hasłami różnych części aplikacji.PHP posiada wystarczająco dużo narzędzi i elastyczności aby można było napisać dowolny systemautoryzacji użytkowników.Poprzednia metoda jest oparta o możliwość obsługi przez przeglądarki wywołańHTTP 401 ale metoda ta posiada wiele ograniczeń.Następna metoda jest bardziej niezależna od platformy iposiada bardziej elastyczne podejście do uwierzytelniania.Kompletny system uwierzytelniania oparty o PHPWykorzystanie metody autoryzacji opisanej w poprzedniej części jest łatwe i proste.Większośćprogramistów WWW wykorzystywało już pliki.htaccess do zabezpieczania katalogów, więc sposób ten jestzwykle dobrze znany.W tej części skupimy się na implementacji, która nie polega na wywołaniach HTTP 401 zserwera, wymuszających na przeglądarce wyświetlenie okna uwierzytelniania.Głównym powodem użycia tegotypu implementacji jest zwiększenie elastyczności aplikacji.Poniższa implementacja wykorzystuje klasę Auth z PHPLIB.Jest to ekstremalnie solidna i elastycznaimplementacja, ale przez o wymaga sporo zachodu, zanim można będzie ją wykorzystać.Jednak po jejzaprogramowaniu jest świetnym zamiennikiem metody opisanej w poprzedniej części.Jeżeli nie korzystamy zmechanizmów przeglądarki przy wyświetlaniu okna uwierzytelniania, musimy sami tworzyć formularz HTMLsłużący do pobierania danych niezbędnych dla naszej aplikacji.Dodatkowo, PHPLIB pozwala na stworzenieautoryzacji opartej na uprawnieniach, więc do każdej strony można przypisać wymagany poziom uprawnień dlakażdego z użytkowników.Mechanizm uwierzytelniania realizowany przez PHPLIB jest w wielu punktach podobny do mechanizmuobsługi sesji.Do działania wymaga on sesji PHPLIB.Schemat autoryzacji PHPLIB jest uruchamiany podczaswywołania funkcji PHPLIB page_open() i zażądanie własności sess.Gdy zostanie zażądana ta własność,Rozdział 8 Uwierzytelnianie100PHPLIB sprawdza zalogowanie użytkownika.Jeżeli użytkownik nie podawał wcześniej danych autoryzacji,PHPLIB wyświetla zdefiniowaną przez użytkownika stronę.Strona ta pobiera dowolne dane, jakich aplikacjawymaga do prawidłowej autoryzacji użytkownika.Następnie PHPLIB wywołuje dostarczoną przez użytkownikafunkcję sprawdzającą uprawnienia użytkownika.Jeżeli funkcja ta zaakceptuje użytkownika, PHPLIB wyświetlastronę a w przeciwnym wypadku następuje ponowne uwierzytelnianie.Na rysunku 8.4.pokazana jest interakcjapomiędzy klientem, serwerem WWW (i tym razem jest to 1U z Penguin Computing) oraz aplikacją PHP.Rysunek 8.4.Interakcja wschemacieautoryzacjiPHPLIBZ powodu elastyczności jaką zapewnia PHPLIB wymagane jest wykonanie kilku niezbędnych krokówzanim użyjemy naszej klasy autoryzacji.Po pierwsze, na wydruku 8.9 pokazane są klasy zdefiniowane przezużytkownika niezbędne do stworzenia klasy Auth i klas ją wspomagających (Klasy sesji i bazy danych sąidentyczne jak te, których używaliśmy w rozdziale 7).W naszym przypadku dane autoryzacji znajdują się wtabeli bazy danych MySQL.Tabela użyta do autoryzacji jest zdefiniowana następująco:CREATE TABLE MyAuth (FirstName varchar(20) NOT NULL,SurName varchar(30) NOT NULL,password varchar(20) NOT NULL,PRIMARY KEY (FirstName, SurName));Wydruk 8.9.Przygotowanie klas używanych przez klasę PHPLIB Authquery( $aSQL );if ( $aDB->num_rows() > 0 ){return $FirstName;}else{return False;}}}?>Klasa Sample_Auth dziedzicząca po klasie bazowej Auth zapewnia działanie specyficzne dla bieżącejaplikacji.Zdefiniowane są odpowiednie funkcje auth_loginform() i auth_validatelogin().Funkcjaauth_loginform() jest wywoływana, gdy klasa Auth wymaga uwierzytelnienia użytkownika.Możesz użyćinstrukcji print() do stworzenia formularza HTML potrzebnego do zalogowania, ale zwykle dołączenie pliku jestłatwiejsze.Na wydruku 8.10 pokazany jest plik użyty w tym przykładzie.Wydruk 8.10.Przykładowy formularz logowania (sample_lform.htinc)Formularz autoryzacji dla PHPLIBImię:Nazwisko:Hasło:Podane dane są nieprawidłowe, spróbuj jeszcze raz.Rozdział 8 Uwierzytelnianie102Strona ta jest zaprojektowana jedynie do wyświetlania przez klasę Auth.Na początku sprawdza, czyzmiene formularza mają jakieś wartości.Może to się zdarzyć, gdy wyświetlamy formularz po nieudanejautoryzacji użytkownika W tym przypadku klasa Auth ponownie wyświetla formularz logowania.Wartościzmiennych formularza są przenoszone do pól formularza FirstName i SurName jedynie z grzeczności (aleużytkownik nie musi ponownie wpisywać tych danych).Następnie strona wyświetla trzy pola tekstowe do wprowadzenia imienia, nazwiska i hasła użytkownika.Dane formularza są wysyłane do strony określonej przez $this->url()
[ Pobierz całość w formacie PDF ]