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

418 responses to “Input validation with filter functions”

  1. cyberrisear1zef Avatar
    cyberrisear1zef

    Je suis accro a Viggoslots Casino, ca offre un plaisir vibrant. Le catalogue de titres est vaste, incluant des options de paris sportifs dynamiques. Avec des depots fluides. Disponible a toute heure via chat ou email. Les paiements sont surs et efficaces, cependant quelques tours gratuits supplementaires seraient cool. Au final, Viggoslots Casino vaut une visite excitante. De plus l’interface est simple et engageante, facilite une immersion totale. Un avantage notable les tournois frequents pour l’adrenaline, propose des privileges personnalises.
    Passer à l’action|

  2. kent casino 309 Avatar

    На официальном сайте казино кент вы найдёте слоты, рулетку, лайв-столы и тематические турниры. Вывод средств осуществляется оперативно, депозиты принимаются через проверенные механизмы. Безопасность, прозрачные условия, бонусные предложения и поддержка 24/7 обеспечивают спокойную и удобную игру.

  3. LunarRunnerix7zef Avatar
    LunarRunnerix7zef

    J’adore l’energie de Betzino Casino, ca offre une experience immersive. Les options de jeu sont incroyablement variees, offrant des sessions live immersives. Il amplifie le plaisir des l’entree. Le service est disponible 24/7. Les paiements sont surs et efficaces, cependant plus de promos regulieres dynamiseraient le jeu. En somme, Betzino Casino offre une experience hors du commun. Ajoutons que la plateforme est visuellement vibrante, ce qui rend chaque partie plus fun. Particulierement cool les transactions crypto ultra-securisees, garantit des paiements securises.
    Apprendre comment|

  4. geopointmsk-512 Avatar

    Нужен тахеометр? аренда тахеометра Leica по выгодной цене. Современные модели для геодезических и строительных работ. Калибровка, проверка, доставка по городу и области. Гибкие сроки — от 1 дня. Консультации инженеров и техническая поддержка.

  5. vavada casino 309 Avatar

    Официальный сайт вавада зеркало: играйте онлайн с бонусами и быстрыми выплатами. Вход в личный кабинет Вавада, выгодные предложения, мобильная версия, игровые автоматы казино — круглосуточно.

  6. vavada 793 Avatar

    Лучшее онлайн казино vavada bet вход с более чем 3000 игр, высокими выплатами и круглосуточной поддержкой.

  7. JasonNergo Avatar
    JasonNergo

    Rabatt Apotek: Rabatterte generiske medisiner – Apotek på nett sammenligning

  8. Harleyfum Avatar

    http://www.bigdive.eu promotions recentes et instructions pour utiliser les codes promo

  9. GeorgeAlila Avatar
    GeorgeAlila

    https://rabattapotek.xyz/# Nettapotek med rask frakt

  10. StephenLib Avatar
    StephenLib

    Rabatterte generiske medisiner Rabatterte generiske medisiner Nettapotek med rask frakt

  11. Williamseelo Avatar
    Williamseelo

    apotheek online: Medicijnen zonder recept bestellen – online apotheek nederland zonder recept

  12. techrunnerin7zef Avatar
    techrunnerin7zef

    J’adore le dynamisme de Vbet Casino, ca invite a l’aventure. Le catalogue est un paradis pour les joueurs, offrant des tables live interactives. 100% jusqu’a 500 € avec des spins gratuits. Le service d’assistance est au point. Les retraits sont fluides et rapides, neanmoins plus de promos regulieres dynamiseraient le jeu. En conclusion, Vbet Casino est un endroit qui electrise. Par ailleurs la plateforme est visuellement captivante, donne envie de continuer l’aventure. Un atout le programme VIP avec des recompenses exclusives, garantit des paiements rapides.
    DГ©couvrir maintenant|

  13. brightcraftis4zef Avatar
    brightcraftis4zef

    Je suis epate par Vbet Casino, il procure une sensation de frisson. Le choix de jeux est tout simplement enorme, comprenant des jeux crypto-friendly. 100% jusqu’a 500 € avec des spins gratuits. Le service client est de qualite. Le processus est clair et efficace, mais encore des bonus plus frequents seraient un hit. En conclusion, Vbet Casino est une plateforme qui pulse. De surcroit le site est rapide et style, apporte une energie supplementaire. Un atout les options variees pour les paris sportifs, cree une communaute vibrante.
    Visiter le site|

  14. JosephCit Avatar
    JosephCit

    https://mexmedsreview.xyz/# cheap branded meds without prescription

  15. betaglowos8zef Avatar
    betaglowos8zef

    J’adore l’energie de Posido Casino, on y trouve une vibe envoutante. La selection est riche et diversifiee, proposant des jeux de casino traditionnels. Avec des transactions rapides. Disponible a toute heure via chat ou email. Les retraits sont lisses comme jamais, rarement quelques free spins en plus seraient bienvenus. En resume, Posido Casino assure un divertissement non-stop. En complement la navigation est simple et intuitive, donne envie de prolonger l’aventure. A souligner les evenements communautaires pleins d’energie, garantit des paiements rapides.
    Essayer ceci|

  16. JasonNergo Avatar
    JasonNergo

    Apotek online jämförelse: apoteket rabattkod – Kunder rankar bästa apotek online

  17. brightlionok8zef Avatar
    brightlionok8zef

    Je suis sous le charme de Posido Casino, ca offre un plaisir vibrant. Il y a une abondance de jeux excitants, offrant des experiences de casino en direct. Le bonus de bienvenue est genereux. Le support est efficace et amical. Le processus est fluide et intuitif, en revanche plus de promos regulieres ajouteraient du peps. Dans l’ensemble, Posido Casino est un immanquable pour les amateurs. Pour completer la plateforme est visuellement electrisante, apporte une touche d’excitation. Un plus le programme VIP avec des niveaux exclusifs, offre des bonus exclusifs.
    Explorer plus|

Leave a Reply

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