Přejít k navigační liště

Zdroják » Zprávičky » PHP 5.2 a filter: konec $_GET?

PHP 5.2 a filter: konec $_GET?

Zprávičky PHP, Různé

Nálepky:

Programátoři, kteří používají PHP již nějaký čas, pamatují už víc doporučených způsobů, jak získat hodnoty předané v GET či POST požadavku – od $HTTP_GET_VARS přes doporučované a opět zatracované proměnné až k superglobálnímu $_GET. Vydrželo s námi od verze 4.1. Od verze 5.2 je v PHP standardně dostupné rozšíření filter a mnozí doporučují používat právě jeho funkce a na superglobální proměnné zapomenout. (Viz též Novinky v PHP5.2 od Jakuba Vrány)

Rozšíření filter se stará o ověření (validation) a ošetření (sanitization) dat. Pomocí direktivy v php.ini  lze nastavit filtrování všech dat v polích jako $_GET, $_POST atd. automaticky na pozadí. Mnohem flexibilnější je nespoléhat se na (ne)filtrování, které může být nastavené pokaždé jinak, a přistupovat k datům pomocí funkce filter_input(), u níž můžeme přesně specifikovat použitý filtr, a která vždy pracuje se surovými daty.

Pomocí validačních filtrů lze ověřit, zda je předložený řetězec např. platná IP adresa, syntakticky správná mailová adresa nebo kupříkladu reálné číslo. Ošetřovací filtry pak dokáží upravit předaná data podle požadavků (odstranit tagy, ponechat znaky platné v URL, ponechat znaky platné v e-mailové adrese nebo odfiltrovat vše, co není číslo). Chování filtrů lze specifikovat pomocí příznaků, nebo si lze napsat filtry vlastní, volané pomocí callback.

Rozšíření filter nabízí několik funkcí, které pokrývají širokou škálu práce s uživatelsky zadanými daty – od ověření existence (dříve isset($_GET[]), nyní filter_has_var()  – údajně rychlejší) přes filtrování vstupních proměnných a polí (filter_input a filter_input_array) až po filtrování libovolných proměnných (filter_var a filter_var_array).

K tématu: Už nepoužívejte $_GET / PHParch

Komentáře

Subscribe
Upozornit na
guest
6 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Murdej

… ne moc dobre provedený.
Proč escapovat už na vstupu?
Při běžném programování (nemyslím tim ukázkové příklady) se stejně s proměnnou provádí další operace než se uloží do db. Třeba kontrola na délku řetězce je escapovaném řetezci nepřesná, takže si stejně musím vytáhnout originální text takže další proměnná navíc.
Navíc snad každý DB layer má dnes escapovaní už v sobě.
Tato „novinka“ je z roku 2006 … trochu pozdě ne? :)

fos4

Zprávička má reagovat na článek který vyšel zhruba před týdnem na phparchu:
http://www.phparch.com/2010/07/08/never-use-_get-again/
Bohužel z textu to není moc patrné.

sdaj;lfkdsalfhdsajhflkjds

To jo, ale obcas potrebujes neco validovat bez toho, abys to vkladal do DB, zobrazoval na vystupu, tedy to zadny layer pro tebe neudela …
Chces odeslat mail na uvedenou adresu, tak si to prozenes s filter_input a je to …
Jinak mi ale ten clanek na PHPArch pripada hrozny – po jeho precteni jsem ziskal dojem, ze escapovat vse hned pri startu skriptu (nebo jeste lepe pred startem) je dobry napad.

juraj

No nech sa páči, potom že prečo každý skúsenejší programátor na PHP nadáva.
Správanie sa mení každú verziu, čo mi v jednej verzii funguje, v druhej hádže chyby. PHP je zdokumentovaný bordel.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Neni nad hodnotny prispevek.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.