Funkcja filter_, czyli jak kompleksowo filtrować dane w PHP od wersji 5.2?
Nie wystarczy napisać samej aplikacji internetowej. Trzeba ją jeszcze odpowiednio zabezpieczyć. Walka programisty z danym wprowadzanymi z zewnątrz to tak naprawdę przyszły bój pomiędzy potencjalnym włamywaczem, a zabezpieczeniami skryptu. Rzutowanie na liczbę całkowitą, sprawdzanie poprawności adresu IP, walidacja kodu HTML to wybiórcze przypadki stojących przed nami wyzwań. Sprawa staje się jednak ciut bardziej klarowna w wersji PHP 5.2, wraz z pojawieniem się funkcji filter_. Nauczmy się jej stosować.
Zapleczem, które mógł wykorzystywać webdeveloper przy tworzeniu zabezpieczeń, były dotychczas przede wszystkim funkcje pozwalające na wprowadzanie wyrażeń regularnych (preg_match, preg_match_all, czy preg_replace), metody rzutowań i konwersji typów (np. (int) lub intval($zmienna)) oraz funkcje pozwalające na sprawdzenie typu wprowadzanych danych (np. is_bool($false)).
Chcąc więc sprawdzić poprawność adresu IP (IPv4) użytkownika, mogliśmy to zrobić w następujący sposób:
if ( preg_match('/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0- 5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0- 5])$/Du', $_SERVER['REMOTE_ADDR']) )
{
// poprawny adres IP
}
Dzięki nowym metodom filtrującym możemy powyższy efekt uzyskać prościej:
if ( (bool)filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false )
{
// poprawny adres IP
}
PHP 5.2 dostarcza aż siedmu funkcji filter_:
- filter_has_var(int $typ, string $nazwa_zmiennej) sprawdzająca, czy zmienna o podanym typie i nazwie istnieje. Dostępne typy to INPUT_POST, INPUT_GET, INPUT_COOKIE, INPUT_SERVER i INPUT_ENV (INPUT_SESSION i INPUT_REQUEST zostaną zaimplementowane w przyszłości) odnoszące się do elementów tablic superglobalnych o nazwach wymienionych po podkreśleniu.
- filter_list() zwraca tablicę z nazwami dostępnych filtrów.
- filter_id(string $nazwa_filtru) zwraca identyfikator przypisany do nazwy filtru.
- filter_input(int $typ, string $nazwa_zmiennej [, int $filtr [, mixed $flaga]]) pozwala na przefiltrowanie danych wejściowych. Typy określa się na zasadzie podanej w pierwszym punkcie tej listy.
- filter_input_array(int $typ [, mixed $definicja]) działające według powyższej zasady, ale na całych tablicach. Drugim parametrem powinna być stała określająca typ filtrowania na wszystkich elementach lub tablica o indeksach równych indeksom tablicy testowanej zawierająca informacje o poszczególnych testach.
- filter_var(mixed $zmienna [, int $filtr [, mixed $ flaga]]) filtruje zmienną wg wskazanego filtra oraz opcjonalnych flag precyzujących model filtrowania.
- filter_var_array(array $dane [, mixed $definicja]) sprawdza tablice wg definicji równoważnych jak w filter_input_array.
Najważniejsze, dostępne filtry i flagi walidujące to:
- FILTER_VALIDATE_EMAIL - sprawdza poprawność adresu e-mail,
- FILTER_VALIDATE_IP - analizuje poprawność adresu IPv4 lub IPv6. Opcjonalne flagi:
- FILTER_FLAG_NO_PRIV_RANGE - wyklucza adresy z puli prywatnej (np. 192.168.0.1),
- FILTER_FLAG_NO_RES_RANGE - wyklucza z puli zarezerwowanej adresy w obydwu typach protokołów (np. 255.255.255.255),
- FILTER_FLAG_IPV4 - sprawdza adres IPv4 pod kątem poprawności (np. 168.100.1.1),
- FILTER_FLAG_IPV6 - sprawdza adres IPv6 pod kątem poprawności (np. fe80:0:0:0:204:61ff:fe9d:f156).
- FILTER_VALIDATE_URL - waliduje poprawność adresu URL. Opcjonalne flagi:
- FILTER_FLAG_SCHEME_REQUIRED - adres zgodny z RFC (np. http://webhosting),
- FILTER_FLAG_HOST_REQUIRED - adres wraz z hostem (np. http://webhosting.pl),
- FILTER_FLAG_PATH_REQUIRED - adres ze ścieżką za nazwą domeny (np. http://webhosting.pl/Magazyn)
- FILTER_FLAG_QUERY_REQUIRED - adres wraz z Query Stringiem (np. http://webhosting.pl/index.php?x=y).
Flagi w zakresie jednego filtru można także łaczyć poprzez użycie | w formie łącznika.
Prócz filtrów walidacyjnych istnieją także czyszczące. Nie tylko testują one ciąg znaków, ale także dokonują pewnych modyfikacji, jeżeli są one niezgodne z założeniami filtru. Przykładem jest tutaj FILTER_SANITIZE_MAGIC_QUOTES działające na zasadzie addslashes().
Serwis w3schools.com przygotował szczegółowe informacje dotyczące poszczególnych funkcji, filtrów (obydwu typów) oraz flag w poruszanym przez nas temacie, które mogą rozszerzyć wiedzę w wyżej opisanym temacie.
«poprzednia 1 2 następna »
Polecamy
Reklama
Popularne
Pobierałeś pirackie pliki? Uważaj! Kontrole antypirackie w domach użytkowników to codzienność
36
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Debata w sprawie ACTA: internauci spodziewali się chyba czegoś innego
14
Wynalazca WWW przed sądem: walczy tam o wolny dostęp do webowych technologii dla każdego
8
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
Internet w EU bez Facebooka i Google? Firmy nie mają wyboru: albo się dostosują, albo…
10
Zaktualizuj PHP do wersji 5.4, zyskasz za darmo nawet o kilkudziesiąt procent wyższą wydajność aplikacji
6
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
[Aktualizacja] Facebook zablokował Demotywatory.pl. W czym zawiniły?
36
FBI zamknęło Megaupload. Anonimowi dali się sprowokować. Teraz ich akcja uzasadni potrzebę SOPA?
17
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
„Donald matole, twój rząd dopadną kibole” – hakerska elita przyłącza się do walki z ACTA
23
Pobierałeś pirackie pliki? Uważaj! Kontrole antypirackie w domach użytkowników to codzienność
36
Społeczność
ady "Po złożeniu podpisu, dane biometryczne zostają trwale powiązane z treścią...
WebDev @slawek22
OK. Rozumiem i wiem, że koncerny stosują regionalizacje i nie...
slawek22 >są inne rodzime serwisy VOD z legalny filmami
WebDev no fakt... jeśli...
WebDev @BLACK BEAR®
"bo denerwujesz mi ludzi na forum” lool
Minister Zdrowia...
tobas ClickShop bardzo wolno działa!!!
Nie dajcie się nabrać na wygląd i...
blackbear @WebDev, widzę że muszę Ci rozjaśnić we łbie. Czytaj więc i nie pisz...
Jay Brak obsługi aplikacji x86/x64 ze zwykłych desktopów to kręcenie na siebie...
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
- Marek: problem z menu (2)
- Marek: Własne checkboxy w HTML,CSS (1)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |








