publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

TAGI: php , programowanie , tips & tricks

2010-01-25 12:36  |  Michał Beyer

Funkcja filter_, czyli jak kompleksowo filtrować dane w PHP od wersji 5.2?

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_:

  1. 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.
  2. filter_list() zwraca tablicę z nazwami dostępnych filtrów.
  3. filter_id(string $nazwa_filtru) zwraca identyfikator przypisany do nazwy filtru.
  4. 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.
  5. 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.
  6. filter_var(mixed $zmienna [, int $filtr [, mixed $ flaga]]) filtruje zmienną wg wskazanego filtra oraz opcjonalnych flag precyzujących model filtrowania.
  7. 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 »

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

Polecamy

Reklama

Polecane książki

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ł