
Poznaj zagrożenia i naucz się im zapobiegać
- Zaplanuj projekt bezpiecznej witryny WWW
- Wyeliminuj słabe punkty w kodzie
- Przetestuj witrynę i wykonaj audyt bezpieczeństwa
Jedną z najpopularniejszych technologii stosowanych przez twórców witryn WWW jest język PHP, baza danych MySQL oraz serwer WWW Apache. Dynamiczny rozwój internetu spowodował pojawienie się na rynku ogromnej ilości aplikacji, za pomocą których niemal każdy może stworzyć dynamiczną witrynę WWW bez konieczności poznawania tej technologii. W efekcie tego w sieci pojawiły się tysiące witryn zbudowanych za pomocą wygodnych w użytkowaniu narzędzi graficznych. Taki stan rzeczy, poza wieloma zaletami, ma jedną ogromną wadę -- twórcy takich witryn rzadko zwracają uwagę na ich bezpieczeństwo. Stworzenie bezpiecznej witryny WWW wymaga pewnej znajomości języka PHP i technik zabezpieczania kodu.
Książka "PHP5. Tworzenie bezpiecznych stron WWW" to podręcznik dla twórców witryn WWW znających język PHP. Przedstawia sposoby minimalizowania ryzyka związanego z atakami hakerskimi przeprowadzanymi dzięki "dziurom" w kodzie strony WWW. Opisuje kluczowe aspekty zabezpieczania witryn WWW i serwerów, na których są one publikowane, omawia modele zagrożeń i metody testowania kodu. Zawiera cenne informacje nie tylko dla programistów, ale również dla administratorów serwerów.
- Słabe punkty witryn WWW
- Klasyfikacja zagrożeń -- model STRIDE
- Projektowanie bezpiecznej aplikacji WWW
- Sprawdzanie poprawności danych
- Metody uwierzytelniania i autoryzacji
- Bezpieczne połączenia z bazami danych
- Ochrona danych i kryptografia
- Testowanie aplikacji
- Konfigurowanie zapór sieciowych
- Przeprowadzanie audytów bezpieczeństwa witryn WWW
Jeśli chcesz tworzyć witryny WWW, które nie będą łatwym łupem dla hakerów -- koniecznie przeczytaj tę książkę.
Wstęp (9)Część I Planowanie bezpiecznej strony WWW (15)
Rozdział 1. Polityka bezpieczeństwa (17)
- Funkcjonalność, koszt, bezpieczeństwo (18)
- Bezpieczeństwo nie jest tanie (18)
- Bezpieczeństwo jest przeciwieństwem funkcjonalności (19)
- Dlaczego bezpieczeństwo jest najważniejsze? (20)
- Bezpieczeństwo = prostota + bezbłędność (21)
- Program powinien być jak najprostszy (21)
- Program powinien mieć jak najmniej błędów (22)
- Zagrożenia (22)
- Przyczyny ataku (22)
- Kto jest naszym wrogiem (24)
- Słabe punkty (25)
- Klasyfikacja zagrożeń - model STRIDE (28)
- S Spoofing identity (fałszowanie tożsamości) (29)
- T Tampering with data (modyfikowanie danych) (29)
- R Repudiability (zaprzeczalność) (29)
- I Information disclosure (ujawnienie danych) (29)
- D Denial of Service (odmowa obsługi) (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)
- Dogłębna obrona (32)
- Strategia wielu warstw (33)
- Programowanie Voodoo (38)
- Analiza zagrożeń (39)
- Określenie dóbr (40)
- Wyznaczenie granic bezpieczeństwa (40)
- Zdefiniowanie przepływu danych (40)
- Zidentyfikowanie punktów dostępowych (41)
- Określenie uprzywilejowanego kodu (42)
- Diagram ataku (43)
- Określenie priorytetów (43)
- Dokumentacja (44)
- Narzędzia (44)
- Ocena zagrożeń (49)
- Ochrona dóbr (51)
- Typy dóbr (51)
- Wycena dóbr (52)
- Ocena ryzyka utraty dóbr (52)
- Zarządzanie ryzykiem (54)
- Akceptacja ryzyka (54)
- Minimalizacja ryzyka (54)
- Uczenie się na błędach (55)
- Dobre praktyki programowania (56)
- Modułowa struktura programu (56)
- Dogłębna obrona (57)
- Sprawdzanie danych wejściowych (57)
- Zasada minimalnych uprawnień (57)
- Zabezpieczanie przez zaciemnianie (58)
- Zabezpieczenia bazujące na rolach (58)
- Bezpieczna domyślna konfiguracja (58)
- Obsługa wyjątków (59)
- Korzystanie ze sprawdzonych systemów kryptograficznych (59)
- Nieprzechowywanie poufnych danych (59)
- Niekorzystanie z wyskakujących okien (60)
- Testowanie (60)
Rozdział 3. Sprawdzanie poprawności danych (63)
- Źródła danych (63)
- URL (63)
- Metoda POST (66)
- Cookies (69)
- Nagłówki HTTP (71)
- Niestandardowe rozszerzenia (72)
- SOAP i XML (72)
- Zagrożenia (73)
- Ukryte dane (73)
- Przepełnienie bufora (75)
- Iniekcja kodu (Cross-site scripting) (75)
- Ataki na formę kanoniczną (77)
- Identyfikatory sesji (79)
- Dostęp do zasobów systemu (80)
- Upload plików (81)
- Walidacja po stronie klienta (81)
- Skrypty Java (82)
- Walidacja po stronie serwera (83)
- Wyrażenia regularne (84)
- Dostęp anonimowy (87)
- Metody uwierzytelniania (88)
- Uwierzytelnianie na poziomie serwera WWW (88)
- Uwierzytelnianie na poziomie formularzy (89)
- Hasła (90)
- Wymaganie bezpiecznych haseł (91)
- Sygnatury (93)
- Automatyczne generowanie haseł (94)
- Model zaufanych podsystemów (95)
- Przedstawianie i delegowanie uprawnień (96)
- Przedstawianie (96)
- Delegowanie (97)
- Uwierzytelnianie i autoryzacja przez serwer WWW (97)
- Blokowanie klientów (97)
- Uwierzytelnienie i autoryzacja klientów (99)
- Konfiguracja aplikacji (102)
- Rozmieszczenie aplikacji (106)
- Kontrola dostępu do plików i folderów (106)
- Linux/Unix (106)
- Windows (111)
- Interpretowanie plików PHP (114)
- Konfiguracja serwera (115)
- PostgreSQL (116)
- Model bezpieczeństwa serwerów baz danych (119)
- Użytkownicy (120)
- Uprawnienia (120)
- Połączenie z bazą (122)
- PostgreSQL (122)
- Iniekcja SQL (128)
- Atak (129)
- Obrona (132)
- Ujawnianie poufnych danych (135)
- Komunikaty błędów (136)
- Komunikaty systemowe (136)
- Przechowywane w bazie dane (136)
- Pliki źródłowe (136)
- Kryptologia (137)
- Podstawowe pojęcia (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)
- Cykl życia certyfikatu (159)
- Sprawdzanie poprawności (160)
- SSL (161)
- Konfiguracja serwera WWW (163)
- IPSec (167)
- Konfiguracja środowiska (169)
- Zmienne globalne (170)
- Izolowanie skryptów PHP (174)
- Reguły pisania bezpiecznego kodu (176)
- Zasada minimalnych uprawnień (177)
- Kontrola typów danych (177)
- Obsługa wyjątków (179)
- Usługi sieciowe (Web Services) (182)
Rozdział 10. Serwer WWW (189)
- Apache (httpd) (189)
- Instalacja w systemach Linux (190)
- Instalacja w systemach Microsoft Windows (192)
- Konfiguracja serwera do współpracy z PHP (192)
- Apache a bezpieczeństwo aplikacji WWW (194)
- Podsumowanie (198)
- Internet Information Server (199)
- Instalacja (199)
- Konfiguracja (201)
- IIS a bezpieczeństwo aplikacji WWW (205)
- Przygotowanie plików do publikacji (215)
- Dostosowanie aplikacji do środowiska (217)
- Kopie zapasowe (221)
- Testowanie a uruchamianie (223)
- Typy błędów (224)
- Dlaczego testowanie jest tak ważne? (224)
- Narzędzia (225)
- Komunikaty błędów (225)
- Narzędzia dodatkowe (227)
- Poprawność kodu HTML i XHTML (229)
- Metoda niezmienników (231)
- Biblioteka błędów (233)
- Instalacja (235)
- Konfiguracja (236)
- Całkowita blokada ruchu sieciowego (237)
- Blokada pakietów przychodzących (238)
- Blokada pakietów wychodzących (239)
- Zdalny dostęp (239)
- Udostępnianie wybranych usług (240)
- Blokada żądań echa (ping) (240)
- Zapis i odtworzenie ustawień (241)
- Podsumowanie (241)
- Specyfika testów bezpieczeństwa (243)
- Testy otwarte (243)
- Testy zamknięte (244)
- Analiza zidentyfikowanych zagrożeń (244)
- Narzędzia (244)
- Nessus (245)
- Retina (247)
- Nikto (248)
- AppScan (249)
- N-Stealth (250)
- Sleuth (252)
- RATS (252)
- Analiza typowych zagrożeń (254)
- Powszechnie znane luki w bezpieczeństwie (254)
- Zagrożenie związane z poufnymi danymi użytkowników (255)
- Zagrożenie związane z danymi sesji (258)
- Zagrożenie związane z ujawnieniem danych (260)
- Zagrożenia związane z wykonaniem wrogiego kodu (262)
Dodatek A Zaciemnianie kodu PHP (267)
- POBS (267)
- Instalacja (268)
- Konfiguracja (268)
- Test (269)
- Więcej opcji konfiguracyjnych (272)
- Zend Encoder (273)
- Instalacja (274)
- Konfiguracja (274)
- Test (274)
- Inne możliwości (276)