Blog 24/7

sanityzacja danych wejściowych

TAB. 1Hasłopo polsku
Po angielskusanitization
Którą formą pisaćpo polsku Polska nazwa przyjęła się w tekstach i w wyszukiwarce — używaj jej samodzielnie.
Inne formyoczyszczanie danych wejściowych · filtrowanie danych wejściowych
KategoriaStrony WWW, WordPress i hosting

Sanityzacja danych wejściowych to oczyszczanie i filtrowanie danych przyjmowanych od użytkownika do dopuszczalnej postaci w chwili ich wczytania, zanim trafią do bazy lub logiki aplikacji. Dokumentacja WordPressa definiuje ją jako proces zabezpieczania, czyszczenia i filtrowania danych wejściowych [1]. Sanityzacja nie odrzuca danych, tylko je przekształca: usuwa znaczniki, zbędne znaki czy nieprawidłowe sekwencje. Jest jedną z trzech warstw obsługi danych, obok walidacji na wejściu i escapowania na wyjściu.

Jak działa

Dane z zewnątrz przechodzą przez kilka etapów, z których każdy robi coś innego. Walidacja według dokumentacji WordPressa to sprawdzenie danych względem wzorca z jednoznacznym wynikiem: poprawne albo niepoprawne [2]. Sanityzacja przekształca dane do bezpiecznej postaci. Escapowanie zabezpiecza dane wyjściowe przez usuwanie niechcianych elementów, takich jak zniekształcony HTML albo znaczniki skryptów [3], i powinno odbywać się jak najpóźniej, najlepiej w chwili wypisania [3].

RYS. 1Droga danych przez aplikację

WordPress wskazuje, że walidacja jest preferowana wobec sanityzacji, bo jest bardziej precyzyjna [1]. Sanityzację stosuje się tam, gdzie nie da się określić dokładnego zbioru poprawnych wartości, na przykład w polu tytułu czy komentarza.

MITRE zwraca uwagę na kolejność operacji: dane należy zdekodować i sprowadzić do postaci kanonicznej, zanim zostaną sprawdzone, i uważać, by nie dekodować ich dwukrotnie [5]. Inaczej zakodowany ładunek przejdzie przez filtr, a zostanie odkodowany dopiero dalej.

OWASP rozróżnia dwa poziomy sprawdzania. Walidacja składniowa pilnuje formatu, na przykład daty albo kwoty; walidacja semantyczna sprawdza sens wartości w kontekście, na przykład czy data początkowa poprzedza końcową albo czy cena mieści się w zakresie [4]. MITRE wymienia cechy, które warto sprawdzać: wielkości takie jak rozmiar, długość czy częstotliwość, poprawność składni, typ danych oraz spójność między elementami [5]. Sanityzacja uzupełnia te kontrole tam, gdzie wartość ma być przyjęta, ale w oczyszczonej postaci.

Rodzaje

Sposób czyszczenia zależy od typu danych. WordPress udostępnia osobne funkcje do adresów e-mail, nazw plików, adresów URL, tekstu, tytułów, nazw użytkowników, kolorów i klas HTML [1].

FunkcjaTyp danych
sanitize_text_field()tekst w jednej linii [1]
sanitize_textarea_field()tekst wielowierszowy [1]
sanitize_email()adres e-mail [1]
sanitize_file_name()nazwa pliku [1]
sanitize_url()adres URL [1]
wp_kses(), wp_kses_post()HTML z listą dozwolonych znaczników [1]

Funkcja sanitize_text_field() sprawdza poprawność UTF-8, zamienia pojedyncze znaki „mniejsze niż” na encje, usuwa wszystkie znaczniki, podziały linii, tabulatory i nadmiarowe spacje oraz usuwa oktety [1].

Równolegle do wyboru funkcji istnieje wybór strategii. Dokumentacja WordPressa zaleca listę dozwolonych wartości, czyli przyjmowanie danych tylko ze skończonego zbioru znanych i zaufanych wartości; lista zakazanych wartości „bardzo rzadko jest dobrym pomysłem” [2]. OWASP wyjaśnia, że listę zakazów łatwo obejść, a przy okazji blokuje ona poprawne dane, na przykład nazwisko z apostrofem [4].

W WordPressie

Typowy wzorzec w kodzie wtyczki wygląda tak: dane z $_POST są czyszczone funkcją dobraną do typu, zapisywane, a przy wypisaniu kodowane dla kontekstu.

$title = sanitize_text_field( wp_unslash( $_POST['title'] ?? '' ) );
update_post_meta( $post_id, 'title', $title );
// przy wyświetlaniu:
echo esc_html( get_post_meta( $post_id, 'title', true ) );

Dokumentacja podkreśla, że niezaufane dane pochodzą z wielu źródeł: od użytkowników, z zewnętrznych serwisów, a nawet z własnej bazy danych, i wszystkie trzeba sprawdzić przed użyciem [2]. Dotyczy to także danych od administratorów [1]. Sprawdzenie typu danych nie zastępuje jednak weryfikacji uprawnień ani tokenu nonce: sanityzacja mówi, jaką postać mają dane, a nie, czy dany użytkownik może je zapisać.

Sekurak opisuje scenariusz typowy dla wtyczek: dane wprowadzone w formularzu zostają zapisane w pliku, a następnie wyświetlone bez sanityzacji w panelu administracyjnym [7]. Tak powstaje Stored XSS wymierzony w administratora. Takie błędy we wtyczkach opisuje hasło podatność we wtyczce.

Zagrożenia i skutki

Brak lub błąd sanityzacji i walidacji MITRE opisuje jako CWE-20: produkt przyjmuje dane, ale nie sprawdza albo źle sprawdza, czy mają właściwości potrzebne do bezpiecznego przetworzenia [5]. Słabość ta pojawia się w zestawieniach CWE Top 25 z kolejnych lat, od 2019 do 2025 roku [5]. Z niedostatecznej obsługi danych wejściowych wynikają:

Jak się bronić

Podstawowa zasada OWASP: walidacja wejścia nie powinna być głównym sposobem zapobiegania XSS, SQL injection i podobnym atakom, choć dobrze wdrożona znacząco ogranicza ich skutki [4]. Główną obroną pozostaje technika właściwa dla miejsca użycia danych: zapytanie parametryzowane dla bazy i escapowanie dla HTML.

  • Po stronie serwera. OWASP wymaga walidacji na serwerze, bo sprawdzenie w JavaScripcie w przeglądarce atakujący obejdzie, wyłączając skrypty albo używając pośredniczącego proxy [4].
  • Jak najwcześniej. Dane sprawdza się zaraz po odebraniu od strony zewnętrznej [4].
  • Najpierw walidacja, potem sanityzacja. Zgodnie z dokumentacją WordPressa [1].
  • Lista dozwolonych wartości zamiast listy zakazów [2] [4].
  • Biblioteka do HTML. Do bogatej treści OWASP odsyła do sprawdzonych bibliotek oczyszczających HTML zamiast własnych filtrów [4]; w WordPressie tę rolę pełni wp_kses() [1].

Historia i przykłady

CERT Polska 29 lipca 2026 roku opisał podatność CVE-2026-33385 w systemie Quick.CMS firmy OpenSolution. Niewłaściwa sanityzacja danych od uprzywilejowanych użytkowników w wielu polach panelu administracyjnego umożliwiała blind SQL injection [6]. Dotyczyło to wersji 6.8, a producent odmówił poprawki, argumentując, że panel i tak pozwala na daleko idące zmiany [6]. Przykład pokazuje, że dane od administratora również wymagają czyszczenia, co podkreśla dokumentacja WordPressa [1].

TAB. 2

Przypisy

7
  1. [1] Sanitizing Data — Common APIs Handbook · WordPress.org
  2. [2] Data Validation — Common APIs Handbook · WordPress.org
  3. [3] Escaping Data — Common APIs Handbook · WordPress.org
  4. [4] Input Validation Cheat Sheet · OWASP
  5. [5] CWE-20: Improper Input Validation · MITRE
  6. [6] Podatność w oprogramowaniu Quick.CMS (CVE-2026-33385) · CERT Polska
  7. [7] Jak zabezpieczyć WordPress – poradnik krok po kroku · Sekurak
TAB. 3

Hasła w tym artykule

11
TAB. 4

Linkują tutaj

26

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com