Przejdź do głównej zawartości

Walidacja danych - klient vs serwer

Walidacja na dwóch frontach

Walidacja danych to proces sprawdzania, czy dane wprowadzone przez użytkownika spełniają określone wymagania. W aplikacjach webowych mamy dwie warstwy walidacji: po stronie klienta (HTML/JavaScript) i po stronie serwera (PHP). Klient poprawia UX - użytkownik od razu widzi błędy. Serwer chroni dane - bo walidację klienta można ominąć. W tej prezentacji wyjaśnisz, dlaczego obie warstwy są potrzebne, pokażesz praktyczne przykłady i udowodnisz, że “JS poprawia UX, PHP chroni dane”.

  1. Co to jest walidacja? - Definicja i cel walidacji danych
  2. Jak to działa? - Mechanizmy walidacji HTML5, JavaScript i PHP
  3. Kiedy używać której warstwy? - Tabela: co walidować gdzie
  4. Na co uważać? - Dlaczego walidacja JS nie wystarcza
  5. Jak robić dobrze? - Best practices i komunikaty błędów
  1. Walidacja HTML5 (atrybuty)

    • required - pole wymagane
    • pattern - wyrażenie regularne
    • type="email", type="number" - typy pól
    • minlength, maxlength, min, max - ograniczenia
  2. Walidacja JavaScript

    • Sprawdzanie przed wysłaniem formularza
    • Dynamiczne komunikaty błędów
    • Walidacja w czasie rzeczywistym (on blur, on input)
  3. Walidacja PHP (serwer)

    • filter_var() - walidacja email, URL, liczb
    • Sprawdzanie długości, zakresu, dozwolonych wartości
    • Zawsze ostateczna linia obrony
  4. Dlaczego JS można ominąć

    • DevTools - edycja HTML
    • curl/Postman - requesty bez przeglądarki
    • Wyłączony JavaScript w przeglądarce
  5. Komunikaty błędów jako UX

    • Jasne, zrozumiałe komunikaty
    • Wskazanie co poprawić
    • Nie zdradzanie informacji atakującym

Schemat przepływu

Formularz → Walidacja JS (UX) → Request → Walidacja PHP (bezpieczeństwo) → Odpowiedź

Tabela porównawcza

Co walidować gdzie: klient (format, obecność) vs serwer (wszystko + logika biznesowa)

Zawartość:

  • Wyjaśnij różnicę między walidacją klienta a serwera
  • Pokaż 1 przykład HTML (np. required, pattern)
  • Pokaż 1 przykład PHP (filter_var lub sprawdzenie długości)
  • Pokaż 1 schemat przepływu danych

Forma: 10 slajdów, 10 minut prezentacji

Ocena: 3.0
  1. Slajd tytułowy - Tytuł, autorzy, data
  2. Agenda - Plan prezentacji
  3. Problem - Co się dzieje bez walidacji? (zepsute dane, ataki)
  4. Definicja walidacji - Czym jest i po co ją stosujemy
  5. Walidacja HTML5 - Atrybuty required, pattern, type
  6. Walidacja JavaScript - Dynamiczne sprawdzanie
  7. Walidacja PHP - filter_var(), sprawdzenia ręczne
  8. Schemat przepływu - Klient → Serwer → Odpowiedź
  9. Dlaczego JS nie wystarcza - Demo/przykład obejścia
  10. Komunikaty błędów - Dobre praktyki UX
  11. Checklista walidacji - Co sprawdzać dla każdego pola
  12. Podsumowanie i źródła

Programista zabezpieczył formularz tylko walidacją JavaScript. Atakujący używa curl:

Okno terminala
curl -X POST https://example.com/api/register \
-d "email=not-an-email&age=-5"

Serwer bez walidacji PHP zapisuje “not-an-email” jako email i “-5” jako wiek. Dane w bazie są zepsute.

Użytkownik otwiera DevTools, usuwa atrybut maxlength="100" z pola textarea i wysyła komentarz o długości 10 000 znaków. Bez walidacji PHP serwer go zapisuje, co może “zepsuć” layout strony lub plik JSON.

Pole “status” w formularzu ma dropdown z opcjami: “aktywny”, “nieaktywny”. Ktoś edytuje HTML i dodaje opcję “admin”. Bez walidacji PHP (sprawdzenie czy wartość jest w dozwolonej liście) - błąd logiki aplikacji.

Przypadek: Formularz rezerwacji

W projekcie semestralnym mamy formularz rezerwacji z polami:

  • Data - walidacja JS: nie wcześniej niż dziś; walidacja PHP: format YYYY-MM-DD + sprawdzenie dostępności
  • Liczba gości - walidacja HTML: min=1 max=10; walidacja PHP: is_numeric() + zakres 1-10
  • Email - walidacja HTML5: type=“email”; walidacja PHP: filter_var($email, FILTER_VALIDATE_EMAIL)

Każde pole ma walidację na obu warstwach. Dzięki temu użytkownik ma szybki feedback (JS), a serwer jest bezpieczny (PHP).

Jedno zdanie kluczowe

“JavaScript poprawia UX, PHP chroni dane” - powtórz to kilka razy w prezentacji.

Pokaż tabelkę

Wizualna tabela “co walidować gdzie” zostaje w pamięci lepiej niż tekst.

Krótkie przykłady

Kod powinien mieć 5-10 linii max. Duże bloki kodu zniechęcają.

Demo obejścia

Jeśli możesz - pokaż na żywo jak edytować HTML w DevTools. To robi wrażenie.

Prezentacja to umiejętność zawodowa!

Walidacja danych to temat, który pojawia się w KAŻDYM projekcie webowym. Zrozumienie różnicy między walidacją klienta a serwera to podstawa pracy programisty.

Wykorzystajcie lekcje - przygotujcie przykłady z własnego projektu semestralnego!

Współpraca to klucz - podzielcie się: jedna osoba zajmuje się stroną klienta (HTML/JS), druga stroną serwera (PHP).

Pamiętajcie: Nigdy nie ufaj danym od użytkownika. Waliduj na serwerze. Zawsze.