Walidacja i sanityzacja to terminy, które w języku polskim nie brzmią zbyt naturalnie (w każdym razie – ten drugi). Natomiast gdy powiemy Validation lub Sanitization – od razu brzmi to lepiej. Obie te rzeczy dotyczą bezpieczeństwa naszej strony, naszych danych, jednakże bardzo często nam się mylą. Bywa, że terminy walidacja i sanityzacja są używane zamiennie, a tak wcale nie powinno być.
Walidacja
Walidacja powinna być pośrednikiem, pomiędzy danymi, które otrzymujemy z niepewnego źródła (formularz, serwer, JS, cokolwiek nad czym nie mamy kontroli) a zapisem takich danych do bazy. Musimy się upewnić, czy ktoś nie próbuje właśnie się nam wpakować na stronę ale też musimy sobie zapewnić poprawność danych. Na przykład, jeżeli udostępniamy checkbox, którego możliwymi wartościami są zero i jeden, warto upewnić się, że ktoś nie próbuje nam zaserwować trójki. Gdy oczekujemy liczby – warto się upewnić, czy jakiś dowcipniś nie napisał „dupa”. Oczywiście sama przeglądarka, gdy wyświetla formularz, zapewnia wstępną walidację. Jednakże nie jest najmniejszym problemem to obejść. Polecam odpowiednie instruowanie przeglądarki, ale raczej po to, aby unikać błędów przy wpisywaniu. Atakujący (czy też osoba po prostu złośliwa) wprowadzi niepożądany kod do naszego skryptu, czegokolwiek nie zrobimy.
Wtedy właśnie nadchodzi pora na walidację. Nasz skrypt dostaje dane, następnie je waliduje. Sprawdza, czy są poprawne.
Sanityzacja
Wyrazem bliskoznacznym sanityzacji jest dezynfekcja, ale… to brzmiałoby gorzej, choć słowo jest bardziej obecne w przeciętnym słowniku przeciętnego Polaka. Sanityzacja powinna przebiegać w drugim kierunku – gdy pobieramy dane z bazy danych i chcemy je wyświetlić. Możecie zapytać, jak to, to dane z naszej własnej bazy są niewiarygodne? Cóż, pewnie, że mogą takie być, ale jest to prawdopodobieństwo nikłe (o ile zadbaliśmy o poprawną walidację!). Natomiast kłopoty mogą się pojawić na przykład przy używaniu cudzysłowów. Ktoś wpisze w formularz cytat Freddiego Mercury:
Wymyśliłem nazwę „Queen”. To tylko nazwa, ale jest królewska i brzmi wspaniale. Lubię otaczać się wspaniałymi rzeczami.
A teraz edytuje swój tekst w polu text i dostaje coś takiego:
1 |
<input type="text" name="qote" value="Wymyśliłem nazwę "Queen". To tylko nazwa, ale jest królewska i brzmi wspaniale. Lubię otaczać się wspaniałymi rzeczami."> |
Jasnym jest, że nie wyświetli się to prawidłowo.
WordPress…
Należy uważać, aby się nie pogubić. Na przykład funkcja register_setting
pozwala na dodanie argumentu 'sanitize_callback`, który… jest wywoływany do zapisu danych. Tak więc nie traktujcie tego rozróżnienia, jako wskazówkę, że wszyscy się do niego stosują. Ot, warto stosować, ale podchodzić należy z ostrożnością.
Walidacja i sanityzacja
Pamiętajcie o tej różnicy i stosujcie obie te techniki!