Cyber Security Academy · Lekcja

Walidacja danych wejściowych i kodowanie danych wyjściowych

Nauczy się Pan/Pani walidować wszystkie dane wejściowe po stronie serwera, kodować dane wyjściowe w odpowiednim kontekście i zapobiegać atakom typu injection.

Lekcja 1 z 413 kroki

Walidacja danych wejściowych i kodowanie danych wyjściowych to bezpłatna lekcja Cyber Security Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cyber Security Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Dlaczego walidacja danych wejściowych ma znaczenie

Luki typu injection — SQL, poleceń, LDAP, XPath i inne — powstają, gdy niezaufane dane wejściowe są interpretowane jako kod. Walidacja danych wejściowych gwarantuje, że dane odpowiadają oczekiwanym typom, długościom i formatom, zanim zostaną przetworzone, zapisane lub zwrócone.

Walidacja z użyciem allowlisty a denylisty

Walidacja z użyciem allowlisty (białej listy) określa, co jest akceptowalne: tylko znaki alfanumeryczne, tylko liczby całkowite z zakresu 1–100, tylko prawidłowe formaty adresów e-mail. Denylista (czarna lista) próbuje blokować znane nieprawidłowe dane wejściowe i zawsze jest niekompletna. Należy preferować allowlisty.

Walidacja po stronie serwera

Walidacja po stronie klienta poprawia wygodę użytkowania, ale nie zapewnia żadnego bezpieczeństwa — atakujący mogą ją łatwo ominąć za pomocą narzędzi deweloperskich przeglądarki lub curl. Zawsze należy przeprowadzać walidację po stronie serwera. Walidacja po stronie klienta jest udogodnieniem, a po stronie serwera — mechanizmem kontroli bezpieczeństwa.

Walidacja danych wejściowych różnych typów

Liczby: sprawdzać typ i zakres. Ciągi znaków: sprawdzać długość i zestaw znaków. Daty: analizować rygorystycznie i sprawdzać zakres. Pliki: sprawdzać rozszerzenie ORAZ sygnaturę magiczną/typ MIME — nigdy nie ufać samemu rozszerzeniu. Adresy URL: analizować i sprawdzać elementy schematu, hosta oraz ścieżki.

Zapytania parametryzowane zapobiegają SQLi

Najważniejszą zasadą walidacji danych wejściowych w bazach danych jest zakaz konkatenowania danych użytkownika z kodem SQL. Należy używać zapytań parametryzowanych (instrukcji przygotowanych), w których dane użytkownika są przekazywane jako parametr, a nie wstawiane do ciągu zapytania.

// WRONG:
const q = "SELECT * FROM users WHERE name = '" + name + "'";
// RIGHT:
const q = "SELECT * FROM users WHERE name = $1";
await client.query(q, [name]);

Konteksty kodowania danych wyjściowych

Ten sam ciąg znaków wymaga innego kodowania w zależności od kontekstu. Treść HTML: kodowanie HTML (< > &). Atrybut HTML: kodowanie atrybutu HTML. JavaScript: kodowanie JS. Parametr URL: kodowanie URL (kodowanie procentowe). Użycie niewłaściwego kodowania pozostawia luki, które mogą wykorzystać atakujący.

Kodowanie HTML jako ochrona przed XSS

Nigdy nie należy wstawiać danych użytkownika bezpośrednio do kodu HTML. Należy używać silnika szablonów lub biblioteki, która automatycznie stosuje escaping HTML. W React wyrażenie {value} jest bezpieczne, natomiast dangerouslySetInnerHTML omija escaping. W Django szablony automatycznie stosują escaping, chyba że jawnie użyje się filtra safe.

Kodowanie w kontekście JavaScript

Podczas wstawiania danych do JavaScriptu (np. do zmiennej zainicjalizowanej danymi użytkownika) kodowanie HTML jest niewystarczające. Należy używać kodowania JSON: JSON.stringify(value). Zapobiega to wydostaniu się danych poza kontekst literału ciągu znaków JS.

Kodowanie URL

Dane dostarczone przez użytkownika, wstawiane do adresów URL, muszą być kodowane procentowo za pomocą encodeURIComponent() (JS) lub urllib.parse.quote() (Python). Niekodowane dane mogą modyfikować strukturę adresu URL, prowadząc do otwartych przekierowań lub przechodzenia poza dozwolony katalog.

Content Security Policy jako dodatkowa warstwa ochrony

CSP zapewnia dodatkową warstwę ochrony przed XSS. Rygorystyczna CSP wykorzystująca wartości nonce uniemożliwia wykonanie skryptu wbudowanego nawet po wstrzyknięciu ładunku XSS, ponieważ przeglądarka odmawia wykonania skryptów bez prawidłowego atrybutu nonce.

Zapobieganie XSS opartemu na DOM

DOM XSS występuje, gdy JavaScript odczytuje dane ze źródeł kontrolowanych przez atakującego (location.hash, document.URL, cookie) i zapisuje je do niebezpiecznych miejsc docelowych (innerHTML, document.write, eval). Należy kontrolować wszystkie przepływy danych od interfejsów API przeglądarki do miejsc docelowych DOM za pomocą narzędzi do analizy statycznej.

Sprawdzenie wiedzy

Dlaczego walidacja danych wejściowych po stronie serwera jest niezbędna, nawet gdy zaimplementowano walidację po stronie klienta?

Podsumowanie

Walidacja danych wejściowych (allowlisty, sprawdzanie typów, ograniczenia długości) w połączeniu z kodowaniem danych wyjściowych zależnym od kontekstu (HTML, JS, URL, parametryzacja SQL) stanowią podstawową ochronę przed atakami injection i XSS. Oba mechanizmy bez wyjątku należy stosować po stronie serwera.

Bezpłatny start

Ucz się Cyber Security Academy dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
76
Lekcje
303

Często zadawane pytania

Czy lekcja „Walidacja danych wejściowych i kodowanie danych wyjściowych” jest bezpłatna?

Tak — pełny tekst „Walidacja danych wejściowych i kodowanie danych wyjściowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cyber Security Academy, przejdź na CoddyKit PRO. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Walidacja danych wejściowych i kodowanie danych wyjściowych”?

Nauczy się Pan/Pani walidować wszystkie dane wejściowe po stronie serwera, kodować dane wyjściowe w odpowiednim kontekście i zapobiegać atakom typu injection. Ćwiczysz Cyber Security Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cyber Security Academy?

Nie wymagamy żadnego doświadczenia. Cyber Security Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Walidacja danych wejściowych i kodowanie danych wyjściowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cyber Security Academy?

Tak. Każda lekcja Cyber Security Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Walidacja danych wejściowych i kodowanie danych wyjściowych
  2. Bezpieczne zarządzanie zależnościami
  3. OWASP ASVS: standard weryfikacji bezpieczeństwa aplikacji
  4. Techniki bezpiecznego przeglądu kodu
← Powrót do Cyber Security Academy