You are on page 1of 14

IDZ DO

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

Planowanie bezpiecznej strony WWW .............................15

Rozdzia 1. Polityka bezpieczestwa ................................................................. 17


Funkcjonalno, koszt, bezpieczestwo ...........................................................................18
Bezpieczestwo nie jest tanie ....................................................................................18
Bezpieczestwo jest przeciwiestwem funkcjonalnoci ...........................................19
Dlaczego bezpieczestwo jest najwaniejsze? ..........................................................20
Bezpieczestwo = prostota + bezbdno .......................................................................21
Program powinien by jak najprostszy ......................................................................21
Program powinien mie jak najmniej bdw ...........................................................22
Zagroenia ........................................................................................................................22
Przyczyny ataku .........................................................................................................22
Kto jest naszym wrogiem ...........................................................................................24
Sabe punkty ...............................................................................................................25
Klasyfikacja zagroe model STRIDE .......................................................................28
S Spoofing identity (faszowanie tosamoci) ..........................................................29
T Tampering with data (modyfikowanie danych) .....................................................29
R Repudiability (zaprzeczalno) ..............................................................................29
I Information disclosure (ujawnienie danych) ..........................................................29
D Denial of Service (odmowa obsugi) ......................................................................30
E Elevation of Privilege (poszerzenie uprawnie) ....................................................30
SD3 dobra strategia programowania ...........................................................................30
Security by design ......................................................................................................31
Security by deployment .............................................................................................31
Security by default .....................................................................................................31
Zabezpieczanie nie polega na ukrywaniu .........................................................................32
Dezinformacja jako technika obrony .........................................................................32
Dogbna obrona ..............................................................................................................32
Strategia wielu warstw ...............................................................................................33

Rozdzia 2. Projekt aplikacji WWW ................................................................... 37


Programowanie Voodoo ...................................................................................................38
Analiza zagroe ..............................................................................................................39
Okrelenie dbr ..........................................................................................................40
Wyznaczenie granic bezpieczestwa .........................................................................40
Zdefiniowanie przepywu danych ..............................................................................40

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\!spis-06.doc

(07-02-06) 3

PHP5. Tworzenie bezpiecznych stron WWW


Zidentyfikowanie punktw dostpowych ..................................................................41
Okrelenie uprzywilejowanego kodu .........................................................................42
Diagram ataku ............................................................................................................43
Okrelenie priorytetw .....................................................................................................43
Dokumentacja ...................................................................................................................44
Narzdzia ...................................................................................................................44
Ocena zagroe ................................................................................................................49
Ochrona dbr .............................................................................................................51
Typy dbr ...................................................................................................................51
Wycena dbr ..............................................................................................................52
Ocena ryzyka utraty dbr ...........................................................................................52
Zarzdzanie ryzykiem ......................................................................................................54
Akceptacja ryzyka ......................................................................................................54
Minimalizacja ryzyka .................................................................................................54
Uczenie si na bdach .....................................................................................................55
Dobre praktyki programowania .......................................................................................56
Moduowa struktura programu ..................................................................................56
Dogbna obrona ........................................................................................................57
Sprawdzanie danych wejciowych ............................................................................57
Zasada minimalnych uprawnie ................................................................................57
Zabezpieczanie przez zaciemnianie ...........................................................................58
Zabezpieczenia bazujce na rolach ............................................................................58
Bezpieczna domylna konfiguracja ...........................................................................58
Obsuga wyjtkw .....................................................................................................59
Korzystanie ze sprawdzonych systemw kryptograficznych ....................................59
Nieprzechowywanie poufnych danych ......................................................................59
Niekorzystanie z wyskakujcych okien .....................................................................60
Testowanie .................................................................................................................60

Cz II

Tworzenie bezpiecznej strony WWW ...............................61

Rozdzia 3. Sprawdzanie poprawnoci danych .................................................... 63


rda danych ...................................................................................................................63
URL ............................................................................................................................63
Metoda POST .............................................................................................................66
Cookies ......................................................................................................................69
Nagwki HTTP .........................................................................................................71
Niestandardowe rozszerzenia .....................................................................................72
SOAP i XML .............................................................................................................72
Zagroenia ........................................................................................................................73
Ukryte dane ................................................................................................................73
Przepenienie bufora ..................................................................................................75
Iniekcja kodu (Cross-site scripting) ...........................................................................75
Ataki na form kanoniczn ........................................................................................77
Identyfikatory sesji .....................................................................................................79
Dostp do zasobw systemu ......................................................................................80
Upload plikw ............................................................................................................81
Walidacja po stronie klienta .............................................................................................81
Skrypty Java ...............................................................................................................82
Walidacja po stronie serwera ...........................................................................................83
Wyraenia regularne ........................................................................................................84

4 (07-02-06)

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\!spis-06.doc

Spis treci

Rozdzia 4. Uwierzytelnianie ............................................................................. 87


Dostp anonimowy ...........................................................................................................87
Metody uwierzytelniania ..................................................................................................88
Uwierzytelnianie na poziomie serwera WWW ..........................................................88
Uwierzytelnianie na poziomie formularzy .................................................................89
Hasa .................................................................................................................................90
Wymaganie bezpiecznych hase ................................................................................91
Sygnatury ...................................................................................................................93
Automatyczne generowanie hase ..............................................................................94

Rozdzia 5. Autoryzacja .................................................................................... 95


Model zaufanych podsystemw .......................................................................................95
Przedstawianie i delegowanie uprawnie ........................................................................96
Przedstawianie ...........................................................................................................96
Delegowanie ..............................................................................................................97
Uwierzytelnianie i autoryzacja przez serwer WWW .......................................................97
Blokowanie klientw .................................................................................................97
Uwierzytelnienie i autoryzacja klientw ...................................................................99
Konfiguracja aplikacji ....................................................................................................102

Rozdzia 6. Pliki ............................................................................................. 105


Rozmieszczenie aplikacji ...............................................................................................106
Kontrola dostpu do plikw i folderw ..........................................................................106
Linux/Unix ...............................................................................................................106
Windows ..................................................................................................................111
Interpretowanie plikw PHP ..........................................................................................114

Rozdzia 7. Serwery baz danych ...................................................................... 115


Konfiguracja serwera .....................................................................................................115
PostgreSQL ..............................................................................................................116
Model bezpieczestwa serwerw baz danych ................................................................119
Uytkownicy ............................................................................................................120
Uprawnienia .............................................................................................................120
Poczenie z baz ...........................................................................................................122
PostgreSQL ..............................................................................................................122
Iniekcja SQL ..................................................................................................................128
Atak ..........................................................................................................................129
Obrona ......................................................................................................................132

Rozdzia 8. Ochrona danych ............................................................................ 135


Ujawnianie poufnych danych .........................................................................................135
Komunikaty bdw .................................................................................................136
Komunikaty systemowe ...........................................................................................136
Przechowywane w bazie dane .................................................................................136
Pliki rdowe ..........................................................................................................136
Kryptologia .....................................................................................................................137
Podstawowe pojcia .................................................................................................137
Funkcje mieszania ....................................................................................................143
Szyfrowanie blokowe i strumieniowe ......................................................................146
Szyfrowanie symetryczne ........................................................................................151
Szyfrowanie asymetryczne ......................................................................................152
Systemy hybrydowe PGP (GPG) ........................................................................157
Certyfikaty ......................................................................................................................158
Zawarto certyfikatu ...............................................................................................158
Wystawianie .............................................................................................................158

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\!spis-06.doc

(07-02-06) 5

PHP5. Tworzenie bezpiecznych stron WWW


Cykl ycia certyfikatu ..............................................................................................159
Sprawdzanie poprawnoci .......................................................................................160
SSL .................................................................................................................................161
Konfiguracja serwera WWW ...................................................................................163
IPSec ...............................................................................................................................167

Rozdzia 9. PHP ............................................................................................. 169


Konfiguracja rodowiska ................................................................................................169
Zmienne globalne .....................................................................................................170
Izolowanie skryptw PHP ........................................................................................174
Reguy pisania bezpiecznego kodu ................................................................................176
Zasada minimalnych uprawnie ..............................................................................177
Kontrola typw danych ............................................................................................177
Obsuga wyjtkw ...................................................................................................179
Usugi sieciowe (Web Services) ....................................................................................182

Cz III Uruchamianie bezpiecznej strony WWW .......................187


Rozdzia 10. Serwer WWW ............................................................................... 189
Apache (httpd) ................................................................................................................189
Instalacja w systemach Linux ..................................................................................190
Instalacja w systemach Microsoft Windows ............................................................192
Konfiguracja serwera do wsppracy z PHP ...........................................................192
Apache a bezpieczestwo aplikacji WWW .............................................................194
Podsumowanie .........................................................................................................198
Internet Information Server ............................................................................................199
Instalacja ..................................................................................................................199
Konfiguracja ............................................................................................................201
IIS a bezpieczestwo aplikacji WWW ....................................................................205

Rozdzia 11. Aplikacja ...................................................................................... 215


Przygotowanie plikw do publikacji ..............................................................................215
Dostosowanie aplikacji do rodowiska ..........................................................................217
Kopie zapasowe ..............................................................................................................221

Rozdzia 12. Testowanie ................................................................................... 223


Testowanie a uruchamianie ............................................................................................223
Typy bdw ...................................................................................................................224
Dlaczego testowanie jest tak wane? .............................................................................224
Narzdzia ........................................................................................................................225
Komunikaty bdw .................................................................................................225
Narzdzia dodatkowe ...............................................................................................227
Poprawno kodu HTML i XHTML ..............................................................................229
Metoda niezmiennikw ..................................................................................................231
Biblioteka bdw ..........................................................................................................233

Rozdzia 13. Zapory sieciowe ........................................................................... 235


Instalacja .........................................................................................................................235
Konfiguracja ...................................................................................................................236
Cakowita blokada ruchu sieciowego ......................................................................237
Blokada pakietw przychodzcych ..........................................................................238
Blokada pakietw wychodzcych ............................................................................239
Zdalny dostp ...........................................................................................................239
Udostpnianie wybranych usug ..............................................................................240

6 (07-02-06)

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\!spis-06.doc

Spis treci

7
Blokada da echa (ping) .......................................................................................240
Zapis i odtworzenie ustawie ...................................................................................241
Podsumowanie ...............................................................................................................241

Rozdzia 14. Audyt bezpieczestwa ................................................................... 243


Specyfika testw bezpieczestwa ..................................................................................243
Testy otwarte ............................................................................................................243
Testy zamknite .......................................................................................................244
Analiza zidentyfikowanych zagroe ......................................................................244
Narzdzia ........................................................................................................................244
Nessus ......................................................................................................................245
Retina .......................................................................................................................247
Nikto ........................................................................................................................248
AppScan ...................................................................................................................249
N-Stealth ..................................................................................................................250
Sleuth .......................................................................................................................252
RATS .......................................................................................................................252
Analiza typowych zagroe ...........................................................................................254
Powszechnie znane luki w bezpieczestwie ............................................................254
Zagroenie zwizane z poufnymi danymi uytkownikw .......................................255
Zagroenie zwizane z danymi sesji ........................................................................258
Zagroenie zwizane z ujawnieniem danych ...........................................................260
Zagroenia zwizane z wykonaniem wrogiego kodu ..............................................262

Dodatki ......................................................................................265
Dodatek A Zaciemnianie kodu PHP ................................................................ 267
POBS ..............................................................................................................................267
Instalacja ..................................................................................................................268
Konfiguracja ............................................................................................................268
Test ...........................................................................................................................269
Wicej opcji konfiguracyjnych ................................................................................272

Dodatek B Kompilacja skryptw PHP ............................................................. 273


Zend Encoder .................................................................................................................273
Instalacja ..................................................................................................................274
Konfiguracja ............................................................................................................274
Test ...........................................................................................................................274
Inne moliwoci .......................................................................................................276

Skorowidz ..................................................................................... 279

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\!spis-06.doc

(07-02-06) 7

Rozdzia 4.

Uwierzytelnianie jest procesem polegajcym na sprawdzeniu, czy dane principium


(osoba, komputer, urzdzenie lub program) jest tym, za ktre si podaje. Uoglniajc, uwierzytelnianie polega na sprawdzaniu wiarygodnoci informacji dotyczcych
obiektu lub osoby. W aplikacjach internetowych z reguy polega ona na zweryfikowaniu odebranych od uytkownika danych, np. zgodnoci wpisanych nazwy uytkownika
i hasa z zapisanymi w bazie. Osob, ktrej tosamo zostaa potwierdzona, nazywa si uwierzytelnionym uytkownikiem.
Uwierzytelnianie jest podstawowym mechanizmem zabezpieczenia aplikacji WWW.
Uzupenione o opisan w nastpnym rozdziale autoryzacj pozwala zablokowa
dostp do niektrych stron lub funkcjonalnoci nieuprawnionym osobom.

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.

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\r04-06.doc

(07-02-06) 87

88

Cz II Tworzenie bezpiecznej strony WWW

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.

Uwierzytelnianie na poziomie serwera WWW


Waciwa konfiguracja systemu operacyjnego i serwera WWW jest jednym z najlepszych zabezpiecze przed osobami, ktre prbuj uzyska dostp do zastrzeonych
zasobw.
Standardowe zabezpieczenia obejmuj uruchamianie serwera WWW w kontekcie
nieuprzywilejowanego konta, izolowanie procesu serwera i aplikacji WWW oraz zablokowanie uytkownikom internetowym dostpu do zasobw systemu operacyjnego.

Serwer Apache umoliwia:


1. Anonimowy dostp opcja umoliwiona domylnie; mona skonfigurowa

serwer tak, aby dostp anonimowy by wyczony dla poszczeglnych


udostpnianych stron (w sekcji <Directory> lub <Location> oraz poprzez
plik .htaccess) lub dla wszystkich stron dostpnych na serwerze.
2. Standardowe uwierzytelniania w tym przypadku dane uwierzytelniajce

przysane s jawnym tekstem. Wybierajc t opcj, naley zabezpieczy je za


pomoc protokou SSL/TLS. Zalet jest zgodno ze standardem, gwn wad
jest narzut czasowy zwizany z dostpem do pliku z hasami, w sytuacji gdy
w danej chwili wielu uytkownikw wysya danie dostpu do chronionych stron.
3. Uwierzytelnianie zaawansowane m.in. w oparciu o LDAP, z wykorzystaniem

MD5 i innych kryptograficznych funkcji mieszania. Zaawansowane


uwierzytelnianie moe nie by poprawnie obsugiwane przez rnego
rodzaju oprogramowanie klienckie.

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)

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\r04-06.doc

Rozdzia 4. Uwierzytelnianie

89

Uwierzytelnianie na poziomie formularzy


Typowy sposb ograniczenia dostpu do aplikacji WWW polega na utworzeniu strony
logowania i przekierowaniu na t stron wszystkich da pochodzcych od nieuwierzytelnionych uytkownikw. Informacje uwierzytelniajce s sprawdzane przez aplikacj i z reguy przechowywane w zewntrznym rdle danych relacyjnej bazie
danych czy dokumencie XML. Ten mechanizm uwierzytelniania jest czsto wykorzystywany w celu personalizacji (dostosowania wygldu i funkcjonalnoci strony do prywatnych upodoba uytkownika) stron WWW.

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

przekazane do aplikacji WWW.


3. Nastpuje sprawdzenie danych sesji uytkownika. W przypadku braku danych

uwierzytelniajcych:
a) uytkownik zostaje przekierowany do strony logowania;
b) aplikacja weryfikuje podane przez niego dane uwierzytelniajce i jeeli s

poprawne, zapisuje je w danych sesji, a uytkownik zostaje z powrotem


przekierowany do chronionej strony WWW;
c) podanie niepoprawnych danych powoduje wywietlenie odpowiedniego

komunikatu i odmow dostpu do chronionej strony (rysunek 4.1).


Rysunek 4.1.
Przebieg
uwierzytelniania

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.

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\r04-06.doc

(07-02-06) 89

90

Cz II Tworzenie bezpiecznej strony WWW

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

uytkownikw do chronionych stron, nieuwierzytelnionych do strony


z komunikatem bdu.
Komunikacja ze stron logowania powinna by zabezpieczona opisanym w rozdziale
8. protokoem SSL/TLS.

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)

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\r04-06.doc

Rozdzia 4. Uwierzytelnianie

91

Wymaganie bezpiecznych hase


Bezpieczne s takie hasa, ktre znasz tylko Ty, a ktre nie mog zosta zdobyte przez
nieupowanione osoby. W wikszoci przypadkw do zdobycia hasa atakujcy wykorzystuj specjalne programy, a wic to te programy, a nie czowieka, musimy przechytrzy. Atakujcy do zdobycia hasa moe wykorzysta:
1. Swoj wiedz o uytkowniku, np. znajc dat urodzenia, przezwisko czy drugie

imi, sprawdzi, czy ktre z nich nie jest jego hasem.


2. Plik sownika kolejne sprawdzanie wszystkich zapisanych w nim sw ujawni

haso bdce dowolnym wyrazem jzyka polskiego albo jakiegokolwiek innego


jzyka.
3. Program, ktry bdzie sprawdza wszystkie moliwe kombinacje liter, cyfr

i znakw specjalnych. Atak tego typu wymaga sprawdzenia ogromnej liczby


kombinacji (np. Aa1, A1a, aA1, a1A, 1Aa, 1aA) i w praktyce przeprowadzany
jest po zdobyciu zaszyfrowanych danych uwierzytelniajcych.
Znajc sposoby zdobywania hase, moesz okreli wymogi, jakie powinny spenia
hasa, aby ich zdobycie byo praktycznie niemoliwe:
1. Po pierwsze, haso nie moe w ogle przypomina: nazwy uytkownika, imienia,

nazwiska, daty urodzenia, adresu, imienia ulubionego zwierzcia, autora, filmu


czy ksiki.
2. Po drugie, haso nie moe by wyrazem jakiegokolwiek jzyka hasa

inwentaryzacja, agrokultura czy uporzdkowywanie s prawie tak samo atwe


do zdobycia, jak hasa typu 1234.
3. Po trzecie, haso nie powinno by krtsze ni omioznakowe, a jeeli nie ma

adnych specjalnych przeciwwskaza, dugo hasa powinna wynosi


co najmniej 12 znakw.
4. Po czwarte, haso powinno zawiera przynajmniej kilka
a) wielkich liter alfabetu (od A do Z),
b) maych liter alfabetu angielskiego (od a do z),
c) cyfr (od 0 do 9),
d) znakw specjalnych (np.:, !, $, #, %).

PHP wyposaony zosta w mechanizmy pozwalajce na wymuszenie na uytkowniku


silnego hasa. Listing 4.1 przedstawia zastosowanie funkcji wchodzcych w skad
rozszerzenia Crack do testowania poprawnoci hasa podanego przez uytkownika
(listing 4.1).
Listing 4.1. Sprawdzanie bezpieczestwa hasa podanego przez uytkownika
<?php
// ...
// Otwarcie pliku zawierajcego sownik

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\r04-06.doc

(07-02-06) 91

92

Cz II Tworzenie bezpiecznej strony WWW


$slownik = crack_opendict($sciezka.'slownik.pwd');
if ($slownik) {
// Sprawdzenie poprawnoci hasa
if (crack_check($slownik, $_POST['passwd'])) {
echo "Haso poprawne!";
// ...
} else {
echo "Haso nie spenia zasad bezpieczestwa - sprbuj jeszcze
raz.\n";
// ...
}
crack_closedict($slownik);
} else {
echo "Problem z otwarciem pliku sownika\n";
}
?>

Jak nauczy uytkownikw stosowania bezpiecznych hase?


Podstawowym bdem, ktry wikszo uytkownikw popenia przy wymylaniu hase, jest prba znalezienia jakiego skomplikowanego wyrazu i dodanie na pocztku
lub na kocu kilku cyfr. Efektem takiego podejcia s hasa typu: Eklezjologia4,
12indosatariuszy czy merkantylizacja111. W rezultacie otrzymujemy trudne do zapamitania haso, ktrego zamanie jest rwnie atwe, co zamanie hasa typu Marcin77
albo 2razy4 przecie atakujcy dysponuj programami, ktre z rwn atwoci
sprawdzaj hasa obu rodzajw.
Inna popularna metoda tworzenia hase polega na zastpowaniu okrelonych liter w wyrazie znakami alfanumerycznymi i specjalnymi. Na przykad haso haso moe zosta
zastpione cigiem h@s0. Takie sztuczki nie chroni ju przed atakami sownikowymi od kiedy coraz wicej osb zaczo stosowa takie hasa, atakujcy dodali
opisywane permutacje do sownikw i prawdopodobiestwo zdobycia obu hase stao si
prawie identyczne (np. zobacz sownik dostpny na stronie http://www.openwall.com).
Zamiast prbowa utworzy haso na podstawie jednego wyrazu, wykorzystaj w tym
celu cae zdania bd frazy. Na przykad zdanie Tylko nie dzisiaj moe zosta zamienione na Tylk0_Nie_Dzisiaj bezpieczne, bo nie znajdujce si w adnym sowniku,
skomplikowane i dugie, a jednoczenie atwe do zapamitania haso. Albo zdanie Lubi
swoj prac mona zmieni na haso LubieSw0jPrac przecie aden program do
amania hase nie bdzie sprawdza poczenia wszystkich wystpujcych w sowniku
sw.
Innym sposobem na wymylenie bezpiecznego hasa jest uycie pocztkowych liter
fragmentu dobrze Ci znanego wiersza czy piosenki np.:
Czy pamitasz, jak z tob taczyem walca,
Panno, madonno, legendo tych lat?
moesz zamieni na hasa: CzyJakW@lca, Pa-ma-le-ty-La, Cp,jzttw itd.
Tworzc hasa, powiniene pamita, e:

92 (07-02-06)

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\r04-06.doc

Rozdzia 4. Uwierzytelnianie

93

1. Im dusze haso, tym lepsze nie naley ba si tworzenia dugich hase.

Z dowiadczenia wiemy, e im bardziej dowiadczona osoba, tym dusze s


stosowane przez ni hasa. Na przykad administrator jednego z wikszych
polskich systemw komputerowych stosowa haso
J@kJaNienawidzeTejCh0lernejRoboty!!!.
2. Prawie zawsze do zdobycia hasa s wykorzystywane specjalne programy,

a wic to je musisz przechytrzy, a nie atakujcego zamiast bezmylnie


uywa znalezionych w sowniku skomplikowanych wyrazw, powiniene
wykorzysta swoj fantazj do przeksztacenia dobrze Ci znanych zda
czy fraz.
3. Jeeli uytkownik z obawy, e je zapomni, stosuje sabe hasa, przekonaj go,

eby wymyli i zapisa sobie na kartce bezpieczne haso. W zapisywaniu


hase nie ma nic zego, o ile kartka z hasem nie znajdzie si w pobliu komputera.
Najlepszym miejscem dla zapisanego hasa jest portfel.

Sygnatury
Ponisze wskazwki powinny by dla Ciebie oczywiste:
1. Nigdy nie przechowuj hase uytkownikw w jawnej postaci. W kocu

tylko oni (a nie np. administrator serwera i programista aplikacji WWW)


powinni je zna. Zapisanie ich gdziekolwiek, choby w pliku tymczasowym
czy pamici, w jawnej postaci obnia poziom bezpieczestwa aplikacji do zera.
2. Z tego samego powodu nigdy nie przechowuj hase zaszyfrowanych

odwracalnie, tj. w taki sposb, e na podstawie szyfrogramu mona otrzyma


jawn posta hasa.
3. Jedynym w miar bezpiecznym sposobem przechowywania hase jest

przechowywanie ich sygnatur (wynikw funkcji mieszania). W ten sposb


nie ograniczamy funkcjonalnoci aby sprawdzi poprawno hasa, wystarczy
porwna wyliczon na podstawie wpisanego hasa sygnatur z zapisan np.
w bazie danych. Jeeli sygnatury s zgodne, to prawie na pewno uytkownik
poda poprawne haso.
Jeeli jeste ciekawy, z czego wynika ta pewno, zajrzyj do rozdziau 8.

To rozwizanie nie jest bezpieczne, jest jedynie bezpieczniejsze ni poprzednie. Nie


tylko dlatego, e wiedzc, w jaki sposb zostay wyliczone sygnatury, atakujcy zawsze
moe porwnywa wyliczone przez siebie i zapisane sygnatury2, ale rwnie dlatego,
e w pewnych sytuacjach, znajc sygnatur, atakujcy moe podszy si pod uytkownika w kocu weryfikujemy zgodno sygnatur, prawda?
2

Poniewa uywane algorytmy s znane, narzdzia te po prostu porwnuj sygnatury wszystkich


kombinacji znakw albo sw ze sownika oraz ich rnych permutacji z sygnatur hasa.

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\r04-06.doc

(07-02-06) 93

94

Cz II Tworzenie bezpiecznej strony WWW

Automatyczne generowanie hase


Zdarza Ci si zapomnie hasa do niektrych stron WWW? Innym te, wic projektujc
aplikacj WWW, powiniene umoliwi uytkownikom automatyczne generowanie nowych hase3. W innym przypadku administrator bdzie mia sporo dodatkowej pracy.
W wikszoci przypadkw mechanizm generowania hase wykorzystuje dwie dodatkowe
zwizane z kontem uytkownika informacje:
1. oglnie znane i wywietlane anonimowym uytkownikom pytanie,
2. poufn, znan tylko danemu uytkownikowi odpowied.

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

Oczywicie powiniene rwnie umoliwi im zmian wasnego hasa.

94 (07-02-06)

D:\Skad\PHP5. Tworzenie bezpiecznych stron WWW\kalki\r04-06.doc

You might also like