Walidacja i satynizacja z filter_var()

Sprawdzanie poprawności danych to nieodzowny element każdej strony internetowej. Wszędzie tam, gdzie prosimy użytkownika o wprowadzenie danych, musimy być bardzo ostrożni. Należy określić, czy nie popełnił błędu podczas wpisywania, oraz dodatkowo zabezpieczyć się przed użyciem niepożądanych wyrażeń mogących prowadzić na przykład do SQL lub Java Script Injection.Takie dane jak email lub adres WWW najlepiej sprawdzać przy pomocy wyrażeń regularnych, czyli np. funkcji preg_match(), a dane „oczyszczać” przy pomocy strip_tags, int_val lub podobnych. Od PHP 5.2 mamy jednak do dyspozycji jeszcze jedno dobre narzędzie – funkcję filter_var().

Dzięki niej możemy sprawdzić poprawność różnych danych, oraz przefiltrować je w celu pominięcia określonych znaków. Wszystko w postaci jednego, krótkiego polecenia.

Przykładowo, aby sprawdzić poprawność adresu email. Wystarczy, że użyjemy następującego polecenia:

filter_var('mail@server.com', FILTER_VALIDATE_EMAIL);

Funkcja filter_var zwróci testowaną zmienną jeśli jest ona poprawna, lub false w przypadku, gdy jest błędna.

Istnieje możliwość przeprowadzania wielu innych testów:
FILTER_VALIDATE_BOOLEAN – zwraca true dla „1″, „true”, „on” lub „yes”, false dla pozostałych wartości. Po zastosowaniu flagi FILTER_NULL_ON_FAILURE zwraca false tylko dla for „0″, „false”, „off”, „no” i “”. Jeśli testowana zmienna nie jest boolean, zwraca NULL.
FILTER_VALIDATE_FLOAT – sprawdza, czy parametr jest liczbą zmiennoprzecinkową
FILTER_VALIDATE_INT – sprawdza, czy parametr jest liczbą całkowitą
FILTER_VALIDATE_IP – sprawdza poprawność adresu IP. Można zastosować flagi zawężające test do protokołu IPv4, IPv6, adresów prywatnych lub zarezerwowanych
FILTER_VALIDATE_REGEXP – do używania wyrażeń regularnych (Pearl)
FILTER_VALIDATE_URL – sprawdzanie poprawności adresu URL

Przy użyciu funkcji filter_var() można także „oczyścić” dane z niepożądanych znaków. Poniższy kod usunie zezmiennej $var wszystko poza cyframi oraz znakiem +/-

$var_clean = filter_var($var, FILTER_SANITIZE_NUMBER_INT);

Lista innych możliwości jest całkiem długa, przy pomocy innych parametrów możemy dodawać slashe do ciągów, usuwać niepożądane znaki z adresów e-mail, ciągów znaków, adresów URL itd. Istnieje możliwość używania flag, które dodatkowo rozszerzają możliwość filtrów.

Oprócz filter_var() istnieją także inne funkcje związane z filtrowaniem danych. Umożliwiają one bezpośrednie filtrowanie zmiennych $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV oraz własnych tablic. Szczegóły można znaleźć w dokumentacji.

Dodaj komentarz