Wróć do bloga
Bezpieczeństwo praktyczne

Sanityzacja danych w programowaniu – po co i jak

2025-01-285 min


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.