Wróć do bloga
Bezpieczeństwo aplikacji

Sanityzacja danych w programowaniu – po co i jak

Publikacja: 2025-01-282 minKrzysztof Jaroński

Czym jest sanityzacja?

Sanityzacja (sanitization) to oczyszczanie i normalizacja danych wejściowych tak, aby były bezpieczne w danym kontekście użycia. Chodzi o to, żeby dane od użytkownika (formularze, URL-e, API) nie mogły zostać użyte do ataku – np. wstrzyknięcia SQL, XSS czy manipulacji logiką aplikacji.

Sanityzacja nie zastępuje walidacji (czy dane są poprawne formatowo i biznesowo), ale z nią współgra: najpierw walidujesz, potem w zależności od kontekstu – escapujesz lub normalizujesz.

Kontekst ma znaczenie

To samo pole tekstowe może trafić do:

  • Bazy danych – potrzebne jest escapowanie/parametryzacja zapytań (np. prepared statements), żeby uniknąć SQL injection.
  • HTML – trzeba escapować znaki specjalne (np. <, >, "), żeby uniknąć XSS.
  • URL – kodowanie znaków (encoding), żeby parametr nie złamał struktury adresu.
  • Polecenia systemowych / NoSQL – again, nigdy nie sklejaj wejścia użytkownika z poleceniem; używaj API z parametrami.

Jedna „uniwersalna” sanityzacja na wszystko nie istnieje – zawsze zależy od kontekstu, w którym dane są później używane.

Dobre praktyki

  • Nie ufaj wejściu – traktuj wszystkie dane od użytkownika (i z zewnętrznych systemów) jako potencjalnie niebezpieczne.
  • Prepared statements / parametryzacja – przy SQL (i podobnych) używaj zawsze zapytań parametryzowanych, nie konkatenacji stringów.
  • Escapowanie przy wypisywaniu – w HTML używaj funkcji escapujących dla danej technologii (np. w React domyślnie jest częściowa ochrona; przy dangerouslySetInnerHTML musisz sam zapewnić bezpieczeństwo).
  • Whitelist zamiast blacklist – tam gdzie to możliwe, definiuj dozwolone znaki lub formaty zamiast próbować wycinać „złe” znaki.

Podsumowanie

Sanityzacja to element secure coding: odpowiednie traktowanie danych wejściowych w zależności od kontekstu. W połączeniu z walidacją i sensowną konfiguracją (CSP, nagłówki) znacząco zmniejsza ryzyko injection i XSS.

Chcesz sprawdzić, czy Twoja aplikacja poprawnie obsługuje wejście? Pentest webowy często obejmuje właśnie te obszary.