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

1,035 responses to “Input validation with filter functions”

  1. Timothyvug Avatar
    Timothyvug

    Stromectol tablets ivermectin uk buy buy ivermectin online

  2. Tristanced Avatar
    Tristanced

    https://stromectadirect.com/# Stromectol over the counter

  3. Martinbrott Avatar
    Martinbrott

    buy ivermectin online: stromectol online bestellen – StromectaDirect

  4. Martinbrott Avatar
    Martinbrott

    buy prednisone: prednisone pill prices – prednisone price

  5. Antoniotable Avatar

    Слушеть Рэп онлайн In addition to traditional album releases, many rappers utilize social media to share their music, build their brands, and connect with fans, leading to the rise of viral hits that can change the trajectory of their careers.

  6. Timothyvug Avatar
    Timothyvug

    generic amoxil 500 mg amoxicillin tablet 500mg Amoxicillin 500mg buy online

  7. Tristanced Avatar
    Tristanced

    https://navikarapharmacy.xyz/# amoxicillin 500 mg tablets

  8. Martinbrott Avatar
    Martinbrott

    Indiava Meds: indian pharmacy – indian pharmacy

  9. Martinbrott Avatar
    Martinbrott

    india pharmacy: india pharmacy – IndiavaMeds

  10. Tristanced Avatar
    Tristanced

    https://indiavameds.com/# indian pharmacy

  11. Harveycurce Avatar

    армированная пленка Отражающая изоляция – это современный материал, предназначенный для повышения энергоэффективности зданий и сооружений.

  12. JasonNeubs Avatar
    JasonNeubs

    Visit our main platform > https://www.mitasuoil.com/

  13. Martinbrott Avatar
    Martinbrott

    buy prednisone: Prednexa Med – buy prednisone online no script

  14. Martinbrott Avatar
    Martinbrott

    Stromecta Direct: best pharmacy buy Stromectol – Ivermectin tablets for humans

  15. Tristanced Avatar
    Tristanced

    https://indiavameds.xyz/# indian pharmacy

  16. Martinbrott Avatar
    Martinbrott

    cheap amoxil: generic amoxil – amoxicillin 500 mg tablet

  17. vibewaveos9zef Avatar
    vibewaveos9zef

    Je suis sous le charme de Casinozer Casino, ca transporte dans un univers de plaisirs. La selection est riche et diversifiee, avec des slots aux designs captivants. 100% jusqu’a 500 € plus des tours gratuits. Le suivi est toujours au top. Les paiements sont surs et fluides, neanmoins des recompenses en plus seraient un bonus. Pour finir, Casinozer Casino assure un fun constant. En complement la plateforme est visuellement captivante, apporte une touche d’excitation. Un point cle les competitions regulieres pour plus de fun, propose des privileges sur mesure.
    Poursuivre la lecture|

  18. dreamrunnerar6zef Avatar
    dreamrunnerar6zef

    Je suis sous le charme de Casinozer Casino, ca invite a plonger dans le fun. Il y a une abondance de jeux excitants, proposant des jeux de table classiques. Avec des depots fluides. Le support client est irreprochable. Les gains arrivent sans delai, parfois plus de promotions variees ajouteraient du fun. Pour conclure, Casinozer Casino garantit un amusement continu. Ajoutons que la plateforme est visuellement electrisante, ce qui rend chaque moment plus vibrant. A mettre en avant les competitions regulieres pour plus de fun, cree une communaute vibrante.
    Commencer Г  naviguer|

  19. rocketbitpro-176 Avatar

    Automatizovany system https://rocketbitpro.com pro obchodovani s kryptomenami: boti 24/7, strategie DCA/GRID, rizeni rizik, backtesting a upozorneni. Kontrola potencialniho zisku a propadu.

  20. shadowtigerix4zef Avatar
    shadowtigerix4zef

    J’adore le dynamisme de Mystake Casino, ca offre une experience immersive. Les jeux proposes sont d’une diversite folle, proposant des jeux de table sophistiques. Avec des transactions rapides. Disponible a toute heure via chat ou email. Les gains sont transferes rapidement, mais plus de promos regulieres dynamiseraient le jeu. En bref, Mystake Casino garantit un plaisir constant. D’ailleurs la plateforme est visuellement electrisante, apporte une energie supplementaire. Particulierement fun les options variees pour les paris sportifs, offre des bonus exclusifs.
    Cliquer maintenant|

  21. dreamlogicin4zef Avatar
    dreamlogicin4zef

    Je ne me lasse pas de Stake Casino, il cree une experience captivante. Le choix est aussi large qu’un festival, incluant des paris sportifs pleins de vie. Le bonus de bienvenue est genereux. Le suivi est d’une precision remarquable. Le processus est clair et efficace, cependant des recompenses en plus seraient un bonus. Pour conclure, Stake Casino offre une aventure inoubliable. D’ailleurs le design est moderne et energique, ajoute une touche de dynamisme. Un point fort les options variees pour les paris sportifs, garantit des paiements securises.
    Commencer Г  dГ©couvrir|

  22. blazeriderar9zef Avatar
    blazeriderar9zef

    Je suis totalement conquis par Stake Casino, il propose une aventure palpitante. La gamme est variee et attrayante, incluant des paris sur des evenements sportifs. Avec des depots instantanes. Les agents sont rapides et pros. Le processus est simple et transparent, a l’occasion des offres plus genereuses seraient top. Dans l’ensemble, Stake Casino vaut une exploration vibrante. A souligner le site est rapide et immersif, incite a rester plus longtemps. Egalement top les options de paris sportifs diversifiees, offre des recompenses regulieres.
    Ouvrir la page|

  23. Timothyvug Avatar
    Timothyvug

    Navikara Pharmacy Navikara Pharmacy Amoxicillin 500mg buy online

  24. Martinbrott Avatar
    Martinbrott

    Navikara Pharmacy: Amoxicillin 500mg buy online – Navikara Pharmacy

  25. Tristanced Avatar
    Tristanced
  26. Martinbrott Avatar
    Martinbrott

    buy prednisone: buy prednisone – Prednexa Med

  27. Tristanced Avatar
    Tristanced
  28. Samueleasem Avatar

    Мелбет 1win скачать – это возможность пользоваться платформой в любом месте и в любое время. 1win вход – это быстрый и безопасный доступ к вашему личному кабинету.

  29. Timothyvug Avatar
    Timothyvug

    buy prednisone prednisone price prednisone 4mg tab

  30. Martinbrott Avatar
    Martinbrott

    buy amoxicillin online no prescription: Amoxicillin 500mg buy online – Navikara Pharmacy

Leave a Reply

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