Sanityzacja danych w programowaniu – po co i jak
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
dangerouslySetInnerHTMLmusisz 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.