PHP5_Bezpieczne_programowanie_Leksykon_kieszonkowy_php5lk.pdf

(269 KB) Pobierz
PHP5. Bezpieczne
programowanie.
Leksykon kieszonkowy
Autor: Jacek Ross
ISBN: 83-246-0635-1
Format: 115x170, stron: 160
Twórz bezpieczny kod w PHP!
Jakie rodzaje ataków mog¹ Ci zagroziæ?
Jak siê przed nimi broniæ?
Jak produkowaæ bezpieczne oprogramowanie?
PHP jest z pewnoœci¹ jednym z najbardziej popularnych jêzyków programowania,
pozwalaj¹cych na tworzenie dynamicznych aplikacji WWW. Swoj¹ popularnoœæ zdoby³
dziêki prostej sk³adni, ³atwej konfiguracji oraz przejrzystym zasadom dzia³ania.
PHP jest œwietnym przyk³adem na to, ¿e prostota i elegancja bywaj¹ lepsze ni¿
nadmierne zaawansowanie i niepotrzebna komplikacja. Pomimo swej prostoty jêzyk
PHP jest bardzo wymagaj¹cy w sprawach zwi¹zanych z bezpieczeñstwem. Zmusza on
programistê do poœwiêcenia niezwyk³ej uwagi kwestii wyboru bezpiecznych rozwi¹zañ.
Z pewnoœci¹ brakowa³o Ci ksi¹¿ki, która w jednym miejscu gromadzi³aby wszelkie
informacje zwi¹zane z bezpieczeñstwem w PHP. Dziêki pozycji „PHP5. Bezpieczne
programowanie. Leksykon kieszonkowy ” poznasz podstawy bezpiecznego
programowania, sposoby obs³ugi danych pobranych z zewn¹trz oraz przekazywania
ich pomiêdzy skryptami. Autor przedstawi Ci rodzaje ataków na aplikacje PHP
oraz najlepsze metody obrony przed nimi. Ponadto nauczysz siê we w³aœciwy sposób
konfigurowaæ PHP oraz zdobêdziesz wiedzê na temat zasad bezpiecznej produkcji
oprogramowania. Je¿eli chcesz tworzyæ bezpieczne rozwi¹zania w PHP, koniecznie
zapoznaj siê z t¹ ksi¹¿k¹!
Obs³uga danych zewnêtrznych
Wstrzykiwanie kodu
Dobór odpowiednich uprawnieñ
Sposoby uwierzytelniania u¿ytkownika
Bezpieczne obs³ugiwanie b³êdów
Rodzaje ataków na aplikacje napisane w PHP
Obrona przed atakami XSS
Zagro¿enie wstrzykniêciem kodu SQL
Ataki DOS i DDOS
Bezpieczna konfiguracja PHP
Sposoby tworzenia bezpiecznego oprogramowania
Wykorzystaj mo¿liwoœci PHP w pe³ni i bezpiecznie!
Spis tre ci
1. Wst�½p ............................................................................................5
2. Podstawy bezpiecznego programowania ....................................7
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.
Obsäuga danych z zewnñtrz
Wstrzykiwanie kodu
Nadmiar uprawnieþ
Przekazywanie danych miödzy skryptami
Nieuprawnione u ycie skryptu
Uwierzytelnianie u ytkownika
U ycie niebezpiecznych instrukcji
Bezpieczna obsäuga bäödów
Bezpieczeþstwo systemu plików
7
9
10
12
13
18
23
27
30
3. Rodzaje ataków na aplikacje PHP ..............................................32
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.
3.8.
Atak siäowy na hasäo
Przechwycenie hasäa przez nieuprawnionñ osobö
Wäamanie na serwer bazy danych
Wäamanie na serwer PHP
Cross site scripting (XSS)
Wstrzykiwanie kodu SQL (SQL injection)
Wstrzykiwanie poleceþ systemowych (shell injection)
Wstrzykiwanie nagäówków HTTP
do wiadomo ci e-mail (e-mail injection)
3.9. Cross site request forgery (XSRF)
3.10. Przeglñdanie systemu plików (directory traversal)
32
34
34
38
40
42
54
56
57
61
3
3.11.
3.12.
3.13.
3.14.
3.15.
3.16.
3.17.
3.18.
Przejöcie kontroli nad sesjñ (session fixation)
Zatruwanie sesji (session poisoning)
HTTP response splitting
Wykrywanie robotów
Ataki typu DOS i DDOS
Cross site tracing
Bezpieczeþstwo plików cookie
Dziura w preg_match
62
68
84
84
97
101
101
102
4. Konfiguracja serwera PHP ........................................................ 105
4.1. Dyrektywa register_globals
4.2. Tryb bezpieczny (safe mode)
4.3. Ukrywanie PHP, dyrektywa expose_php
105
106
107
5. Metody produkcji bezpiecznego oprogramowania ................ 109
5.1. Architektura programu a bezpieczeþstwo
5.2. Ochrona przez ukrycie informacji
(security by obscurity)
5.3. Pozostawianie „tylnych wej è” i kodu tymczasowego
5.4. Aktualizowanie wersji PHP i u ywanych bibliotek
5.5. U ycie gotowych bibliotek i frameworków
5.6. Zaciemnianie kodu PHP
5.7. Kodowanie ródeä PHP
5.8. Psychologiczne aspekty
bezpieczeþstwa aplikacji sieciowych
109
111
113
114
115
120
126
127
6. Rozwój j�½zyka PHP ................................................................... 138
6.1. Porównanie zmian wpäywajñcych na bezpieczeþstwo
w PHP5 w stosunku do wydania 4.
6.2. Kierunki rozwoju jözyka PHP w wersji 6.
138
139
S owniczek poj�½ë ...................................................................... 141
Skorowidz ..................................................................................151
4
_
Spis tre ci
5. Metody produkcji
bezpiecznego oprogramowania
5.1. Architektura programu a bezpiecze stwo
Architektura programu mo e mieè istotny wpäyw na poziom jego
bezpieczeþstwa. Nie ma zbyt wielu ogólnych reguä dotyczñcych
tego, jak prawidäowo powinna byè zaprojektowana aplikacja sie-
ciowa, wiele zale y bowiem od: u ytych technologii, przyjötej
metodologii projektowej, rozmiaru projektu i zespoäu, oprogra-
mowania u ywanego podczas tworzenia aplikacji, a tak e od
samego jej rodzaju i wszystkich szczegóäów jej dziaäania. Istnieje
jednak kilka zasad, o których powinien pamiötaè programista
i projektant:
x
Prostota. Trawestujñc Einsteina, mo na by powiedzieè, e
kod powinien byè tak prosty, jak to mo liwe, ale nie bardziej.
W prostym, eleganckim i przejrzystym kodzie znajdzie siö
prawdopodobnie znacznie mniej bäödów ni w zawiäym,
peänym nadmiarowo ci i tricków programistycznych. Kod
krótszy nie zawsze jest prostszy i bardziej przejrzysty. Warto
czasem napisaè go wiöcej, lecz czytelniej — w sposób bar-
dziej zrozumiaäy. Mo e on zostaè potem äatwiej przeanali-
zowany przez innego programistö, który, je li znajdzie w nim
bäödy, bödzie mógä zasugerowaè poprawki. Jest to szczegól-
nie istotne przy programach typu open source.
x
Kontrola jako ci. W przypadku adnej wiökszej aplikacji nie
jest dobrym rozwiñzaniem przerzucanie kontroli jako ci
na programistów czy u ytkowników. Bäödy wykryte przez
tych ostatnich sñ kosztowne w naprawie, pogarszajñ wize-
runek programu, a w przypadku gdy dotyczñ zabezpieczeþ,
mogñ stanowiè przyczynö du ej liczby udanych ataków na
5. Metody produkcji bezpiecznego oprogramowania
_
109
aplikacjö (nie ka dy u ytkownik zgäosi bäñd producentowi —
niektórzy mogñ postanowiè wykorzystaè go do wäasnych
celów). Programi ci z kolei nie sñ zazwyczaj w stanie wykryè
wielu nieprawidäowo ci ze wzglödu na brak obiektywizmu
wzglödem wäasnego kodu i problem z dostrze eniem tych
bäödów, które umknöäy ich uwadze na etapie implementacji.
Warto wiöc podzieliè testowanie na etapy, u ci liè jego pro-
cedury i scenariusze oraz skorzystaè z takich technik, jak
testy jednostkowe (tworzone przez programistów), automa-
tyczne, funkcjonalne (röczne), bezpieczeþstwa czy te testy
obciñ enia (które mogñ tak e mieè wpäyw na bezpieczeþstwo,
minimalizujñc ryzyko ataków typu DOS i DDOS).
x
Skupienie kluczowych elementów aplikacji. Je li nasz pro-
gram mo e mieè nastöpujñce wywoäania:
login.php?user
´=54
,
basket.php?what=add&pid=10
,
product.php?cat=17&
´prod=12
i
details.php?uid=3&mode=1
, to poprawne chro-
nienie go mo e staè siö sporym wyzwaniem. Dlaczego?
Poniewa istnieje wiele punktów wej cia do niego i ka dy
z nich musi zostaè niezale nie zabezpieczony. Wprawdzie
mo emy procedury zabezpieczeþ wydzieliè do osobnego
pliku czy klasy i wywoäywaè je w skryptach, lecz bödziemy
wtedy musieli pamiötaè o tym, aby robiè to prawidäowo
w ka dym z tych miejsc, a gdy dodamy nowy plik, jego
tak e bödziemy musieli zabezpieczyè. W dodatku ka dy
ze skryptów przyjmuje zupeänie inne parametry. W takim
gñszczu äatwo o bäñd, a jeden le zabezpieczony skrypt mo e
wystarczyè do tego, aby caäa aplikacja przestaäa byè bez-
pieczna. Lepiej zrobiè jeden punkt wej cia do aplikacji, ste-
rujñc jej przebiegiem poprzez parametr, i zminimalizowaè
liczbö pozostaäych parametrów. Powy sze odwoäania mogñ
przyjñè postaè:
index.php?what=login&uid=54
,
index.php?
´what=basket_add&pid=10
,
index.php?what=product&cat=
´17&prod=12
i
index.php?what=details&uid=3&mode=1
.
110
_
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
Zgłoś jeśli naruszono regulamin