PHP5. Bezpieczne programowanie. Leksykon kieszonkowy.pdf

(276 KB) Pobierz
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
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!
119562165.001.png 119562165.002.png
Spis treci
1. Wstp ............................................................................................5
2. Podstawy bezpiecznego programowania .................................... 7
2.1. Obsuga danych z zewntrz
7
2.2. Wstrzykiwanie kodu
9
2.3. Nadmiar uprawnie
10
2.4. Przekazywanie danych midzy skryptami
12
2.5. Nieuprawnione uycie skryptu
13
2.6. Uwierzytelnianie uytkownika
18
2.7. Uycie niebezpiecznych instrukcji
23
2.8. Bezpieczna obsuga bdów
27
2.9. Bezpieczestwo systemu plików
30
3. Rodzaje ataków na aplikacje PHP ..............................................32
3.1. Atak siowy na haso 32
3.2. Przechwycenie hasa przez nieuprawnion osob 34
3.3. Wamanie na serwer bazy danych 34
3.4. Wamanie na serwer PHP 38
3.5. Cross site scripting (XSS) 40
3.6. Wstrzykiwanie kodu SQL (SQL injection) 42
3.7. Wstrzykiwanie polece systemowych (shell injection) 54
3.8. Wstrzykiwanie nagówków HTTP
do wiadomoci e-mail (e-mail injection)
56
3.9. Cross site request forgery (XSRF)
57
3.10. Przegldanie systemu plików (directory traversal)
61
3
119562165.003.png
3.11. Przejcie kontroli nad sesj (session fixation)
62
3.12. Zatruwanie sesji (session poisoning)
68
3.13. HTTP response splitting
84
3.14. Wykrywanie robotów
84
3.15. Ataki typu DOS i DDOS
97
3.16. Cross site tracing
101
3.17. Bezpieczestwo plików cookie
101
3.18. Dziura w preg_match
102
4. Konfiguracja serwera PHP ........................................................ 105
4.1. Dyrektywa register_globals
105
4.2. Tryb bezpieczny (safe mode)
106
4.3. Ukrywanie PHP, dyrektywa expose_php
107
5. Metody produkcji bezpiecznego oprogramowania ................ 109
5.1. Architektura programu a bezpieczestwo
109
5.2. Ochrona przez ukrycie informacji
(security by obscurity) 111
5.3. Pozostawianie „tylnych wej” i kodu tymczasowego 113
5.4. Aktualizowanie wersji PHP i uywanych bibliotek
114
5.5. Uycie gotowych bibliotek i frameworków
115
5.6. Zaciemnianie kodu PHP
120
5.7. Kodowanie róde PHP
126
5.8. Psychologiczne aspekty
bezpieczestwa aplikacji sieciowych
127
6. Rozwój jzyka PHP ................................................................... 138
6.1. Porównanie zmian wpywajcych na bezpieczestwo
w PHP5 w stosunku do wydania 4.
138
6.2. Kierunki rozwoju jzyka PHP w wersji 6.
139
Sowniczek poj ...................................................................... 141
Skorowidz ..................................................................................151
4
Spis treci
5. Metody produkcji
bezpiecznego oprogramowania
5.1. Architektura programu a bezpieczestwo
Architektura programu moe mie istotny wpyw na poziom jego
bezpieczestwa. Nie ma zbyt wielu ogólnych regu dotyczcych
tego, jak prawidowo powinna by zaprojektowana aplikacja sie-
ciowa, wiele zaley bowiem od: uytych technologii, przyjtej
metodologii projektowej, rozmiaru projektu i zespou, oprogra-
mowania uywanego podczas tworzenia aplikacji, a take od
samego jej rodzaju i wszystkich szczegóów jej dziaania. Istnieje
jednak kilka zasad, o których powinien pamita programista
i projektant:
Prostota. Trawestujc Einsteina, mona by powiedzie, e
kod powinien by tak prosty, jak to moliwe, ale nie bardziej.
W prostym, eleganckim i przejrzystym kodzie znajdzie si
prawdopodobnie znacznie mniej bdów ni w zawiym,
penym nadmiarowoci i tricków programistycznych. Kod
krótszy nie zawsze jest prostszy i bardziej przejrzysty. Warto
czasem napisa go wicej, lecz czytelniej — w sposób bar-
dziej zrozumiay. Moe on zosta potem atwiej przeanali-
zowany przez innego programist, który, jeli znajdzie w nim
bdy, bdzie móg zasugerowa poprawki. Jest to szczegól-
nie istotne przy programach typu open source.
Kontrola jakoci. W przypadku adnej wikszej aplikacji nie
jest dobrym rozwizaniem przerzucanie kontroli jakoci
na programistów czy uytkowników. Bdy wykryte przez
tych ostatnich s kosztowne w naprawie, pogarszaj wize-
runek programu, a w przypadku gdy dotycz zabezpiecze,
mog stanowi przyczyn duej liczby udanych ataków na
5. Metody produkcji bezpiecznego oprogramowania
109
aplikacj (nie kady uytkownik zgosi bd producentowi —
niektórzy mog postanowi wykorzysta go do wasnych
celów). Programici z kolei nie s zazwyczaj w stanie wykry
wielu nieprawidowoci ze wzgldu na brak obiektywizmu
wzgldem wasnego kodu i problem z dostrzeeniem tych
bdów, które umkny ich uwadze na etapie implementacji.
Warto wic podzieli testowanie na etapy, ucili jego pro-
cedury i scenariusze oraz skorzysta z takich technik, jak
testy jednostkowe (tworzone przez programistów), automa-
tyczne, funkcjonalne (rczne), bezpieczestwa czy te testy
obcienia (które mog take mie wpyw na bezpieczestwo,
minimalizujc ryzyko ataków typu DOS i DDOS).
Skupienie kluczowych elementów aplikacji. Jeli nasz pro-
gram moe mie nastpujce wywoania: login.php?user
prod=12 i details.php?uid=3&mode=1 , to poprawne chro-
nienie go moe sta si sporym wyzwaniem. Dlaczego?
Poniewa istnieje wiele punktów wejcia do niego i kady
z nich musi zosta niezalenie zabezpieczony. Wprawdzie
moemy procedury zabezpiecze wydzieli do osobnego
pliku czy klasy i wywoywa je w skryptach, lecz bdziemy
wtedy musieli pamita o tym, aby robi to prawidowo
w kadym z tych miejsc, a gdy dodamy nowy plik, jego
take bdziemy musieli zabezpieczy. W dodatku kady
ze skryptów przyjmuje zupenie inne parametry. W takim
gszczu atwo o bd, a jeden le zabezpieczony skrypt moe
wystarczy do tego, aby caa aplikacja przestaa by bez-
pieczna. Lepiej zrobi jeden punkt wejcia do aplikacji, ste-
rujc jej przebiegiem poprzez parametr, i zminimalizowa
liczb pozostaych parametrów. Powysze odwoania mog
przyj posta: index.php?what=login&uid=54 , index.php?
110
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
=54 , basket.php?what=add&pid=10 , product.php?cat=17&
what=basket_add&pid=10 , index.php?what=product&cat=
17&prod=12 i index.php?what=details&uid=3&mode=1 .
Zgłoś jeśli naruszono regulamin