Przejdź do głównej zawartości

Podstawy bezpieczeństwa w PHP

Bezpieczeństwo aplikacji PHP

Bezpieczeństwo to jeden z najważniejszych aspektów tworzenia aplikacji webowych. Każda aplikacja, która przyjmuje dane od użytkowników, jest potencjalnie narażona na ataki. W tej prezentacji omówisz podstawowe zasady bezpieczeństwa w PHP: dlaczego nie można ufać danym z formularzy, czym różni się walidacja od sanitizacji oraz jak bronić się przed popularnymi atakami takimi jak XSS czy session hijacking. Zrozumienie tych koncepcji jest kluczowe dla każdego programisty webowego.

  1. Co to jest “zaufanie do danych”? - Dlaczego dane z formularza są potencjalnie niebezpieczne
  2. Jak to działa? - Mechanizm ataków XSS, podstawy CSRF i kradzieży sesji
  3. Kiedy używać walidacji vs sanitizacji? - Różnica między sprawdzaniem a czyszczeniem danych
  4. Na co uważać? - Najczęstsze błędy programistów PHP
  5. Jak robić dobrze? - Dobre praktyki i funkcje PHP do ochrony aplikacji
  1. Zasada “nie ufaj danym” Wyjaśnij, dlaczego każde dane wejściowe (formularze, URL, cookies) mogą być zmanipulowane przez atakującego. Użytkownik może wysłać dowolne dane, nie tylko te z formularza HTML.

  2. Walidacja vs Sanitizacja

    • Walidacja: sprawdzenie czy dane spełniają wymagania (np. czy email ma poprawny format)
    • Sanitizacja: oczyszczenie danych z potencjalnie niebezpiecznych elementów (np. usunięcie tagów HTML)
    • Schemat: kiedy walidować, kiedy sanitizować
  3. Ochrona przed XSS (Cross-Site Scripting) Pokaż przykład użycia htmlspecialchars() przy wyświetlaniu danych użytkownika. Wyjaśnij, że XSS to problem “outputu” - atakujący wstrzykuje skrypt, który wykonuje się w przeglądarce ofiary.

  4. Bezpieczne sesje Omów podstawowe zasady: regeneracja ID sesji po logowaniu, flagi HttpOnly i Secure dla cookies, timeout sesji.

  5. Dobre praktyki Lista konkretnych rekomendacji: używaj prepared statements, escapuj output, waliduj input, stosuj HTTPS, aktualizuj PHP.

Schemat przepływu danych

Formularz → Walidacja PHP → Zapis do pliku/bazy → Sanitizacja przy wyświetlaniu

Przykład kodu

Kod pokazujący htmlspecialchars(), filter_var() oraz bezpieczne użycie sesji

Zawartość:

  • Wyjaśnij minimum 3 zagrożenia (np. XSS, brak walidacji, kradzież sesji)
  • Pokaż 1 fragment kodu z htmlspecialchars()
  • Pokaż 1 schemat przepływu danych
  • Podstawowe definicje: walidacja, sanitizacja

Forma: 10 slajdów, 10 minut prezentacji

Ocena: 3.0
  1. Slajd tytułowy - Tytuł, autorzy, data
  2. Agenda - Co omówicie w prezentacji
  3. Problem - Dlaczego bezpieczeństwo jest ważne (przykład wycieku danych)
  4. Zasada “nie ufaj danym” - Definicja i uzasadnienie
  5. Walidacja - Co to jest, przykład kodu
  6. Sanitizacja - Co to jest, przykład kodu htmlspecialchars()
  7. Schemat przepływu - Diagram: input → walidacja → zapis → sanitizacja → output
  8. XSS - jak działa atak - Prosty schemat ataku
  9. Bezpieczne sesje - Flagi cookies, regeneracja ID
  10. Typowe błędy - Lista błędów do unikania
  11. Dobre praktyki - Checklista bezpieczeństwa
  12. Podsumowanie i źródła

Użytkownik dodaje komentarz: <script>alert('Hacked!')</script>. Jeśli aplikacja nie używa htmlspecialchars() przy wyświetlaniu, skrypt wykona się w przeglądarce każdego, kto zobaczy komentarz. Atakujący może w ten sposób kraść cookies sesji lub przekierowywać użytkowników na fałszywe strony.

Formularz przyjmuje wiek użytkownika jako tekst. Bez walidacji ktoś może wpisać “abc” lub “-5”, co zepsuje logikę aplikacji i dane w pliku JSON.

Przypadek: Atak na sklep internetowy

W 2023 roku polska firma e-commerce padła ofiarą ataku XSS. Atakujący wstrzyknął złośliwy skrypt do pola “nazwa produktu” w panelu administracyjnym. Skrypt kradł cookies sesji administratorów. W ciągu tygodnia atakujący uzyskał dostęp do 3 kont admina i zmienił numery kont bankowych do przelewów. Straty: 50 000 PLN. Rozwiązanie: wprowadzenie htmlspecialchars() na wszystkich outputach i Content Security Policy.

Mów do publiczności

Patrz na słuchaczy, nie na ekran. Bezpieczeństwo to temat, który łatwo “sprzedać” - pokaż realne konsekwencje ataków.

Wyjaśniaj kod

Nie czytaj kodu linijka po linijce. Powiedz: “Ta funkcja zamienia znaki specjalne na bezpieczne odpowiedniki”.

Używaj analogii

“Walidacja to jak sprawdzenie dowodu osobistego, sanitizacja to jak dezynfekcja rąk przed wejściem do szpitala.”

Nie strasz, edukuj

Pokaż problemy, ale od razu dawaj rozwiązania. Słuchacze mają wyjść z wiedzą, jak się bronić.

Prezentacja to umiejętność zawodowa!

Bezpieczeństwo to temat, który naprawdę interesuje pracodawców. Programista, który rozumie podstawy security, jest cenniejszy na rynku pracy.

Wykorzystajcie lekcje - konsultujcie strukturę prezentacji, ćwiczcie przed lustrem lub kamerą!

Współpraca to klucz - podzielcie się tematami: jedna osoba może zająć się walidacją i sanitizacją, druga sesjami i XSS.

Pamiętajcie: dobra prezentacja o bezpieczeństwie to taka, po której słuchacze wiedzą, jak zabezpieczyć własny projekt.