W poprzednim poście mówiłem o tym, dlaczego używanie funkcji filtrowania PHP jest bardziej przydatne niż nie.
Krótko mówiąc, pomaga to zapewnić poziom walidacji wbudowany w język, dzięki czemu nie musimy niczego przepisywać. Oczywiście są pewne zastrzeżenia.
Na przykład, jeśli musisz sprawdzić poprawność wartości, która nie zawiera znaków niełacińskich, będziesz musiał przejść sam i zaimplementować walidację za pomocą wyrażenia regularnego.
Ale jeśli używasz adresów e-mail, adresów URL, numerów, adresów IP i wielu innych rzeczy, możesz użyć czegoś, co już istnieje.
W każdym razie wszystko powyższe dotyczy filtrowania zmiennych. A co z danymi wejściowymi? To znaczy te, które pochodzą z $_POST
lub $_GET
. Możliwe jest użycie podobnej strategii z inną funkcją i innym zestawem filtrów.
Ale jeśli rozumiesz podstawy przedstawione w ostatnim poście, ten post nie będzie się bardzo różnił.
Funkcje filtrowania PHP, część 2: Wejścia
Filtrowanie wejść odbywa się za pomocą filter_input
funkcji. Definicja tej konkretnej funkcji to:
Pobiera określoną zmienną zewnętrzną według nazwy i opcjonalnie ją filtruje
I, jak wspomniałem ostatnio, brzmi to trochę dziwnie, dopóki nie zrozumiesz, czym są filtry. Na szczęście omówiliśmy to w poprzednim poście. I chociaż ten post skupi się konkretnie na POST
(i bardzo krótko GET
).
Istnieją jednak inne filtry. Należą do nich:
INPUT_COOKIE
INPUT_SERVER
INPUT_ENV
W każdym razie, ponieważ dwie najczęstsze operacje, które widzę w WordPressie, to POST
i GET
, wydaje się ważne, aby uwzględnić te dwie tutaj.
Korzystanie z tych funkcji jest banalnie proste. Załóżmy, że masz wartość pochodzącą z czegoś, co użytkownik podał w formularzu i przesyła ją do serwera za pomocą POST
żądania z kluczem, takim jak firstname
.
Kod do weryfikacji może wyglądać mniej więcej tak:
filter_input(INPUT_POST, 'firstname');
Co jest dość łatwe do zrozumienia, ponieważ po prostu pobiera klucz, filtruje go, a następnie zwraca wartość. A ponieważ zwraca wartość, możemy ustawić klauzulę Guard przed przejściem do dalszej pracy:
1if (false === filter_input(INPUT_POST, 'firstname')) {
2 return;
3}
Jeśli wszystko się sprawdzi, możemy przejść dalej, robiąc wszystko, co musimy zrobić z informacjami o użytkowniku. Być może z jakiegoś powodu musimy powiązać go z aktualnym postem:
1if (false === filter_input(INPUT_POST, 'firstname')) {
2 return;
3}
4
5$firstname = filter_input(INPUT_POST, 'firstname');
6update_post_meta(get_the_ID(), 'acme-firstname', $firstname);
7
8// Other code you may use...
Co więcej, możesz jeszcze bardziej zabezpieczyć informacje, korzystając z różnych istniejących filtrów. Są one przekazywane do filter_input
funkcji jako trzeci parametr.
A co z GET
?
Zaletą tej funkcji jest to, że ogólnie rzecz biorąc, obowiązują te same zasady, co w przypadku, z POST
wyjątkiem tego, że zamiast używać INPUT_POST
, użyjesz INPUT_GET
.
Następnie możesz pracować nad swoim kodem, jakkolwiek najlepiej odpowiada potrzebom twojego projektu.
Bezpieczeństwo, Nonces itp.
Pamiętaj, to nie jest coś, co można wykorzystać zamiast zabezpieczenia. Służy to wyłącznie zabezpieczeniu danych, zanim cokolwiek z nimi zrobisz.
Nie zastępuj weryfikacji wartości jednorazowych tylko dlatego, że weryfikujesz dane w inny sposób.
Zmienne i wejścia
Pamiętaj, chociaż te funkcje są bardzo podobnymi zmiennymi, a dane wejściowe są różne. Innymi słowy, nie próbuj używać filter_var
podczas pracy z danymi wejściowymi pochodzącymi od użytkownika lub przeglądarki. Używaj go za każdym razem, gdy pracujesz ze zmiennymi. I podobnie użyj ht e