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.
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.
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
- Walidacja danych wejściowych i kodowanie danych wyjściowych
- Bezpieczne zarządzanie zależnościami
- OWASP ASVS: standard weryfikacji bezpieczeństwa aplikacji
- Techniki bezpiecznego przeglądu kodu