Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
PHP5. Tworzenie
bezpiecznych
stron WWW
Autorzy: Marcin Szeliga, Rafa Wileczek
ISBN: 83-246-0255-0
Format: B5, stron: 296
Poznaj zagroenia i naucz si im zapobiega
Zaplanuj projekt bezpiecznej witryny WWW
Wyeliminuj sabe punkty w kodzie
Przetestuj witryn i wykonaj audyt bezpieczestwa
Jedn z najpopularniejszych technologii stosowanych przez twrcw witryn WWW
jest jzyk PHP, baza danych MySQL oraz serwer WWW Apache. Dynamiczny rozwj
internetu spowodowa pojawienie si na rynku ogromnej iloci aplikacji, za pomoc
ktrych niemal kady moe stworzy dynamiczn witryn WWW bez koniecznoci
poznawania tej technologii. W efekcie tego w sieci pojawiy si tysice witryn
zbudowanych za pomoc wygodnych w uytkowaniu narzdzi graficznych. Taki stan
rzeczy, poza wieloma zaletami, ma jedn ogromn wad twrcy takich witryn rzadko
zwracaj uwag na ich bezpieczestwo. Stworzenie bezpiecznej witryny WWW wymaga
pewnej znajomoci jzyka PHP i technik zabezpieczania kodu.
Ksika PHP5. Tworzenie bezpiecznych stron WWW to podrcznik dla twrcw witryn
WWW znajcych jzyk PHP. Przedstawia sposoby minimalizowania ryzyka zwizanego
z atakami hakerskimi przeprowadzanymi dziki dziurom w kodzie strony WWW.
Opisuje kluczowe aspekty zabezpieczania witryn WWW i serwerw, na ktrych s
one publikowane, omawia modele zagroe i metody testowania kodu. Zawiera cenne
informacje nie tylko dla programistw, ale rwnie dla administratorw serwerw.
Sabe punkty witryn WWW
Klasyfikacja zagroe model STRIDE
Projektowanie bezpiecznej aplikacji WWW
Sprawdzanie poprawnoci danych
Metody uwierzytelniania i autoryzacji
Bezpieczne poczenia z bazami danych
Ochrona danych i kryptografia
Testowanie aplikacji
Konfigurowanie zapr sieciowych
Przeprowadzanie audytw bezpieczestwa witryn WWW
Jeli chcesz tworzy witryny WWW, ktre nie bd atwym upem dla hakerw
koniecznie przeczytaj t ksik.
Wstp .............................................................................................. 9
Cz I
(07-02-06) 3
Cz II
4 (07-02-06)
Spis treci
(07-02-06) 5
6 (07-02-06)
Spis treci
7
Blokada da echa (ping) .......................................................................................240
Zapis i odtworzenie ustawie ...................................................................................241
Podsumowanie ...............................................................................................................241
Dodatki ......................................................................................265
Dodatek A Zaciemnianie kodu PHP ................................................................ 267
POBS ..............................................................................................................................267
Instalacja ..................................................................................................................268
Konfiguracja ............................................................................................................268
Test ...........................................................................................................................269
Wicej opcji konfiguracyjnych ................................................................................272
(07-02-06) 7
Rozdzia 4.
Aplikacje internetowe, jako oglnie dostpne, s bardzo dogodnym celem ataku. Na serwerach WWW przechowywanych jest sporo majcych wpyw na bezpieczestwo danych na przykad informacje konfiguracyjne czy nawet hasa. Dlatego musimy
w jaki sposb ogranicza do nich dostp niektre pliki powinny by tylko odczytywane, inne odczytywane i modyfikowane wycznie przez uprawnionych uytkownikw, a jeszcze inne zupenie niedostpne.
Dostp anonimowy
Czasami nie ma potrzeby sprawdzania tosamoci uytkownikw np. jeeli chcemy,
aby wszyscy mieli takie same uprawniania, albo gdy nie interesuje nas, kto uywa naszego programu. W takich przypadkach najlepszym rozwizaniem jest zezwolenie na
anonimowy dostp.
Pierwsze wysane do serwera WWW danie jest zawsze anonimowe (nie zawiera danych uwierzytelniajcych). Dopiero gdy serwer odrzuci takie danie, klient uzgadnia
metod uwierzytelniania i ponawia danie. Moliwe jest wic jednoczesne skonfigurowanie kilku rnych metod uwierzytelniania.
(07-02-06) 87
88
Metody uwierzytelniania
Uwierzytelnianie moe zosta przeprowadzone na poziomie serwera WWW lub aplikacji internetowej. Poniewa klienci bezporednio komunikuj si z serwerem WWW,
ktry przekazuje ich dania do aplikacji WWW, w pierwszej kolejnoci przeprowadzone bd uwierzytelnienia na poziomie serwera, w drugiej formularzy. Jeeli planujesz sprawdza tosamoci uytkownikw na poziomie aplikacji np. za pomoc
formularza logowania serwer WWW powinien zezwala na anonimowy dostp,
w innym przypadku niektre osoby nie zobacz tego formularza, bo ich dania zostan
zablokowane przez serwer WWW.
Dane uwierzytelniajce
Dane uwierzytelnionych uytkownikw, w tym nazwa i haso, musz by dostpne z poziomu aplikacji WWW. PHP udostpnia dane uwierzytelniajce w tablicy superglobalnej $_SERVER: pod indeksem PHP_AUTH_USER znajduje si nazwa uytkownika,
natomiast pod indeksem PHP_AUTH_PW niezaszyfrowane haso. Dane te mog by
dalej przetwarzane przez skrypt PHP.
88 (07-02-06)
Rozdzia 4. Uwierzytelnianie
89
Przebieg uwierzytelnienia
Proces uwierzytelnienia uytkownika przez aplikacj WWW przebiega nastpujco:
1. Uytkownik wysya danie wywietlania chronionej strony WWW.
2. Poniewa serwer WWW nie wymaga uwierzytelniania, danie zostaje
uwierzytelniajcych:
a) uytkownik zostaje przekierowany do strony logowania;
b) aplikacja weryfikuje podane przez niego dane uwierzytelniajce i jeeli s
Wynika z tego, e uwierzytelnianie uytkownikw wymaga przygotowania strony logowania i dodania do kadej chronionej strony kodu, ktry sprawdzi stan sesji i ewentualnie przekieruje uytkownikw do strony logowania.
(07-02-06) 89
90
Strona logowania
Strona logowania powinna:
1. Umoliwi uytkownikowi podanie danych uwierzytelniajcych (np. nazwy
i hasa).
2. Sprawdzi poprawno tych danych.
3. W przypadku ich poprawnoci zapisa dane uwierzytelniajce w sesji
uytkownika.
4. Przekierowa dania do odpowiednich stron WWW uwierzytelnionych
Przekierowanie uytkownika
Kada chroniona strona musi zawiera kod sprawdzajcy stan sesji uytkownika i w razie
potrzeby przekierowujcy go do strony logowania.
Bardzo rzadko wszystkie strony musz by chronione. Planujc aplikacj, zastanw
si, ktre strony bd wymaga uwierzytelnienia.
Hasa
Hasa s i wbrew pojawiajcym si ostatnio opiniom przez najblisze lata nadal
bd podstawowym sposobem uwierzytelniania uytkownikw1. W wikszoci przypadkw haso jest jedynym sposobem sprawdzenia, czy dana osoba jest t, za ktr si
podaje. Czyli jeeli ktokolwiek pozna haso, to bdzie mg skutecznie podszy si pod
uwierzytelnionego uytkownika.
Ostatnio jednym z ulubionych przez niby-specw od bezpieczestwa sloganw jest: Przy mocy
obliczeniowej wspczesnych komputerw zapamitanie bezpiecznego hasa jest niemoliwe, a wic
musimy zastpi je np. certyfikatami. Bd polega na tym, e to nie moc obliczeniowa ma decydujcy
wpyw na bezpieczestwo, a zabezpieczenia aplikacji plus wiele dodatkowych czynnikw, choby
przepustowo sieci. Jeeli nasze haso liczy 6 znakw i zawiera tylko due i mae litery, a atakujcy
jest w stanie przesya 200 hase na minut, odgadnicie hasa zajmie mu nawet na Deep Blue
okoo 300 lat.
90 (07-02-06)
Rozdzia 4. Uwierzytelnianie
91
(07-02-06) 91
92
92 (07-02-06)
Rozdzia 4. Uwierzytelnianie
93
Sygnatury
Ponisze wskazwki powinny by dla Ciebie oczywiste:
1. Nigdy nie przechowuj hase uytkownikw w jawnej postaci. W kocu
(07-02-06) 93
94
Jeeli wpisany przez anonimowego uytkownika adres e-mail oraz odpowied s takie
same jak przechowywane w bazie, aplikacja automatycznie zmieni haso i wyle je pod
wskazany adres (listing 4.2).
Listing 4.2. Generowanie nowego hasa
<?php
$nowe_haslo = "";
$dlugosc = 8; // dugo hasa
for ($i = 0; $i < $dlugosc; $i++) {
// nowe haso ma si skada wycznie ze znakw ASCII o kodach z zakresu od 33 do 126
$nowe_haslo .= chr(mt_rand(33, 126));
}
// Zmiana hasa w bazie danych (oczywicie haso zostaje najpierw zakodowane)
$zakodowane_haslo = sha1($nowe_haslo);
// ...aktualizacja bazy danych...
// Wysanie niezakodowanego hasa uytkownikowi
mail($_POST['email'], " owe haso", "Twoje nowe haso to ".$nowe_haslo);
?>
94 (07-02-06)