Input validation with filter functions

Introduction
Although PHP has a lot of filter functions available, I found that still to many people are using (often incorrect) regular expressions to validate user input. The filter extension is simple, standard available and will fulfill the common validations. Below some pratical examples and things to consider when working with PHP filter functions.

Which are available?
Below a shameless copy paste of the PHP documentation.

  • filter_has_var — Checks if variable of specified type exists
  • filter_id — Returns the filter ID belonging to a named filter
  • filter_input_array — Gets external variables and optionally filters them
  • filter_input — Gets a specific external variable by name and optionally filters it
  • filter_list — Returns a list of all supported filters
  • filter_var_array — Gets multiple variables and optionally filters them
  • filter_var — Filters a variable with a specified filter

Pratical use

Sanitizing
“Filter input escape output” every developer knows this but it is a repetitive job but with the filter extension filterering input became a lot easier. When you correctly filter input you drastically lower the change of application vulnerabilities.

Sanitizing a single variable

$sText = ' ';
$sText = filter_var($sText, FILTER_SANITIZE_STRING);
echo $sText; // This is a comment from a alert("scriptkiddie");

Sanitizing multiple variables, same principle as above but with an array, the filter will sanitize all values inside the array

filter_var_array($_POST, FILTER_SANITIZE_STRING);

Validating an email address

if(filter_var($sEmail, FILTER_VALIDATE_EMAIL) === false) {
     $this->addError('Invalid email address', $sEmail);
}

Validation a complete array
Validating all your data at once with a single filter will make your code clear, all in one place and is more easy to maintain an example below.

$aData = array(
	'student'	=> 'Sjoerd Maessen',
	'class'		=> '21',
	'grades' => array(
			'math' => 9,
			'geography' => 66,
			'gymnastics' => 7.5
	)
);

$aValidation = array(
	'student'	=> FILTER_SANITIZE_STRING,
	'class'		=> FILTER_VALIDATE_INT,
	'grades'	=> array(
				'filter' => FILTER_VALIDATE_INT,
				'flags'	 => FILTER_FORCE_ARRAY,
				'options'=> array('min_range'=>0, 'max_range'=>10))
);

echo '
';
var_dump(filter_var_array($aData, $aValidation));

/*array(3) {
  ["student"]=>
  string(14) "Sjoerd Maessen"
  ["class"]=>
  int(21) // Thats strange, my string is converted
  ["grades"]=>
  array(3) {
    ["math"]=>
    int(9)
    ["geography"]=>
    bool(false) // 66 is > 10
    ["gymnastics"]=>
    bool(false) // 7.5 is not an int
  }
}*/

Note: okay I did not expect that the string '21' would validate true against FILTER_VALIDATE_INT, after some more testing I also noticed that min_range and max_range only work with FILTER_VALIDATE_INT, when using floats or scalars the options are just ignored, so be aware!

The sanitizing examples above can be made easily more restrictive by adding flags like FILTER_FLAG_STRIP_LOW to the sanitize filter, FILTER_FLAG_STRIP_LOW will for example strip all characters that have a numerical value below 32.

Things to consider
Although the filter functions are some time available some of them aren't flawless, at some points the documentation is missing or very unclear. Another example is the filter_var validation for IPv6 addresses. (see bug report #50117). So it is always a good thing to check if the filter is really doing what you expect it does. Write testcases before using. If you use it correctly you can write your validations in the blink of an eye, and this extension will be your new best friend.

Links
Filter functions
Filter flags

Comments

483 responses to “Input validation with filter functions”

  1. Edmundexpon Avatar
    Edmundexpon

    top-rated pharmacies in Ireland

  2. GichardMam Avatar
    GichardMam

    Hey there! This post couldn’t be written any better! Reading through this post reminds me of my old room mate! He always kept chatting about this. I will forward this post to him. Pretty sure he will have a good read. Thank you for sharing!
    кракен это

  3. Edmundexpon Avatar
    Edmundexpon

    pharmacy delivery Ireland

  4. Hermanengam Avatar
    Hermanengam

    best online pharmacy cheapest pharmacies in the USA online pharmacy reviews and ratings

  5. Johnnyfuede Avatar
    Johnnyfuede

    buy medications online safely: compare online pharmacy prices – compare online pharmacy prices

  6. HaroldSHems Avatar
    HaroldSHems

    Irish online pharmacy reviews: irishpharmafinder – Irish online pharmacy reviews

  7. Hermanengam Avatar
    Hermanengam

    top-rated pharmacies in Ireland affordable medication Ireland best Irish pharmacy websites

  8. Johnnyfuede Avatar
    Johnnyfuede

    online pharmacy ireland: trusted online pharmacy Ireland – best Irish pharmacy websites

  9. HaroldSHems Avatar
    HaroldSHems

    discount pharmacies in Ireland: best Irish pharmacy websites – online pharmacy ireland

  10. Haroldovaph Avatar
    Haroldovaph

    http://irishpharmafinder.com/# discount pharmacies in Ireland

  11. Edmundexpon Avatar
    Edmundexpon

    discount pharmacies in Ireland

  12. DanielNemia Avatar

    https://www.bergkompressor.ru Загляните на наш сайт – Узнайте последние новости и обновления первыми.

  13. JamesOdodo Avatar
    JamesOdodo

    Generika online kaufen Deutschland: Rabattcode für Internetapotheke – online apotheke

  14. OscarPuddy Avatar
    OscarPuddy

    PharmaClassement: pharmacie en ligne – pharmacie en ligne

  15. Juliusbuith Avatar
    Juliusbuith

    farmacia online España TuFarmaciaTop farmacia con cupones descuento

  16. BruceMus Avatar
    BruceMus

    http://tufarmaciatop.com/# comprar medicamentos online sin receta

  17. JamesOdodo Avatar
    JamesOdodo

    pharmacie pas cher en ligne: pharmacie en ligne France – PharmaClassement

  18. JerryWet Avatar
    JerryWet
  19. BruceMus Avatar
    BruceMus

    http://sceglifarmacia.com/# top farmacia online

  20. GeraldArgus Avatar

    списание Долгов Когда коллекторы оказывают давление, а долги по кредитам, микрозаймам и займам кажутся непреодолимыми, банкротство может стать единственным выходом.

  21. OscarPuddy Avatar
    OscarPuddy

    Rabattcode fur Internetapotheke: gunstige Medikamente online – beste online Apotheken Bewertung

  22. Robertbairl Avatar

    Корги Корги – милые создания, покорившие интернет! Узнайте забавные факты об этой породе, их характере и привычках.

  23. StanleyArins Avatar

    название Испанский перевод: перевод с и на испанский язык, большой опыт работы, нотариальное заверение.

  24. Juliusbuith Avatar
    Juliusbuith

    pharmacie en ligne pharmacie en ligne liste pharmacies en ligne fiables

  25. JamesOdodo Avatar
    JamesOdodo

    top farmacia online: farmacie senza ricetta online – top farmacia online

  26. OscarPuddy Avatar
    OscarPuddy

    comprar medicamentos online sin receta: farmacias legales en Espana – ranking de farmacias online

  27. Juliusbuith Avatar
    Juliusbuith

    Preisvergleich Online-Apotheken Deutschland zuverlässige Online-Apotheken apotheke online bestellen

  28. BruceMus Avatar
    BruceMus

    https://apothekenradar.shop/# Rabattcode für Internetapotheke

  29. JamesOdodo Avatar
    JamesOdodo

    pharmacie en ligne France: médicaments génériques en ligne pas cher – meilleures pharmacies en ligne françaises

  30. infostat-845 Avatar

    Кулінарний портал https://infostat.com.ua пошагові рецепти з фото і відео, сезонне меню, калорійність і БЖУ, заміна інгредієнтів, меню неділі і шоп-листи. Кухні світу, домашня випічка, соуси, заготовки. Умные фильтры по времени, бюджету и уровню — готовьте смачно і без стресу.

  31. ukrnova-409 Avatar

    Портал про все https://ukrnova.com новини, технології, здоров’я, будинок, авто, гроші та подорожі. Короткі гайди, чек-листи, огляди та лайфхаки. Розумний пошук, підписки за темами, обране та коментарі. Тільки перевірена та корисна інформація щодня.

  32. BruceMus Avatar
    BruceMus

    https://tufarmaciatop.com/# farmacias legales en España

  33. gazette-661 Avatar

    Сайт про все https://gazette.com.ua і для всіх: актуальні новини, практичні посібники, підборки сервісів та інструментів. Огляди техніки, рецепти, здоров’я і фінанси. Удобні теги, закладки, коментарі та регулярні оновлення контенту.

  34. OscarPuddy Avatar
    OscarPuddy

    Generika online kaufen Deutschland: zuverlassige Online-Apotheken – Medikamente ohne Rezept online bestellen

  35. JerryWet Avatar
    JerryWet

    http://sceglifarmacia.com/# acquisto farmaci a domicilio Italia

  36. Russelldow Avatar

    spinbara polityka prywatnosci spinbara pragmatic play gry: Gry od Pragmatic Play dostepne w kasynie spinbara.

  37. JamesOdodo Avatar
    JamesOdodo

    acheter médicaments en ligne livraison rapide: pharmacie en ligne France – pharmacie en ligne

  38. Juliusbuith Avatar
    Juliusbuith

    top farmacia online farmacie senza ricetta online farmacia online Italia

  39. AaronMog Avatar

    Binary Options Trading View: Analyze and Trade Smarter Enhance your trading decisions with Binary Options Trading View, using real-time charts and insights to stay ahead of the market. Explore smarter strategies and live analytics at https://kaiseimaru.jp/ !

  40. kraina-335 Avatar

    Сайт про все https://kraina.one практичні поради, таблиці та калькулятори, добірки сервісів. Теми – здоров’я, сім’я, фінанси, авто, гаджети, подорожі. Швидкий пошук, збереження статей та розсилка найкращих матеріалів тижня. Простою мовою та у справі.

  41. presa-998 Avatar

    Інформаційний портал https://presa.com.ua новини, технології, здоров’я, фінанси, будинок, авто та подорожі. Короткі гайди, огляди, чек-листи та інструкції. Розумний пошук, підписки на теми, закладки та коментарі. Тільки перевірені джерела та щоденні оновлення.

  42. uaeu-795 Avatar

    Єдиний портал знань https://uaeu.top наука та техніка, стиль життя, будинок та сад, спорт, освіта. Гайди, шпаргалки, покрокові плани, експерти відповіді. Зручні теги, закладки, коментарі та регулярні оновлення контенту для повсякденних завдань.

Leave a Reply

Your email address will not be published. Required fields are marked *