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

12,383 responses to “Input validation with filter functions”

  1. Sobenspago Avatar
    Sobenspago

    Right here is the right website for everyone who really wants to understand this topic. You know so much its almost hard to argue with you (not that I actually would want to…HaHa). You definitely put a new spin on a topic that has been discussed for decades. Excellent stuff, just wonderful!
    John Hunter and the Tomb of the Scarab Queen

  2. WilliamCossy Avatar
    WilliamCossy

    rybelsus vs ozempic side effects get semaglutide pharmacy online

  3. Robertdaymn Avatar
    Robertdaymn

    semaglutide injections for weight loss semaglutide cyanocobalamin online pharmacy no rx

  4. WilliamCossy Avatar
    WilliamCossy

    Buy Tadalafil 20mg Cialis over the counter cheapest cialis

  5. HenryLam Avatar
    HenryLam

    Cheap generic Viagra Buy generic 100mg Viagra online Viagra Tablet price

  6. Kennethbus Avatar
    Kennethbus

    https://viagra.onl/# buy Viagra over the counter

  7. Kennethbus Avatar
    Kennethbus

    https://rybelsus.pro/# groupon semaglutide

  8. JamesWew Avatar
    JamesWew

    https://cialis.sbs/# Generic Cialis price

  9. JamesWew Avatar
    JamesWew

    https://viagra.onl/# Viagra online price

  10. Kennethbus Avatar
    Kennethbus

    https://viagra.onl/# Cheap generic Viagra

  11. HenryLam Avatar
    HenryLam

    Cheap Sildenafil 100mg viagra without prescription buy Viagra over the counter

  12. Robertdaymn Avatar
    Robertdaymn

    generic sildenafil Cheap Sildenafil 100mg sildenafil online

  13. WilliamCossy Avatar
    WilliamCossy

    Generic Viagra for sale generic sildenafil Cheap Sildenafil 100mg

  14. Iarnespago Avatar
    Iarnespago

    What’s up, after reading this awesome piece of writing i am as well cheerful to share my experience here with colleagues.
    Joker’s Jewels Wild

  15. WilliamCossy Avatar
    WilliamCossy

    Cheap generic Viagra sildenafil online Cheap generic Viagra online

  16. WilliamCossy Avatar
    WilliamCossy

    Cheap Viagra 100mg cheap viagra Viagra generic over the counter

  17. JamesWew Avatar
    JamesWew

    https://rybelsus.pro/# low dose semaglutide

  18. Kennethbus Avatar
    Kennethbus

    https://cialis.sbs/# п»їcialis generic

  19. HenryLam Avatar
    HenryLam

    rybelsusВ® semaglutide stomach pain otc rybelsus

  20. Robertdaymn Avatar
    Robertdaymn

    Buy Tadalafil 10mg Cialis over the counter cheapest cialis

  21. Kennethbus Avatar
    Kennethbus

    https://viagra.onl/# Generic Viagra online

  22. Robertdaymn Avatar
    Robertdaymn

    Viagra generic over the counter Generic Viagra for sale Cheap generic Viagra

  23. Kennethbus Avatar
    Kennethbus

    https://cialis.sbs/# Buy Tadalafil 5mg

  24. JamesWew Avatar
    JamesWew

    https://cialis.sbs/# buy cialis pill

  25. JamesWew Avatar
    JamesWew

    https://viagra.onl/# Cheap Sildenafil 100mg

  26. WilliamCossy Avatar
    WilliamCossy

    cheapest cialis Generic Tadalafil 20mg price cialis for sale

  27. WilliamCossy Avatar
    WilliamCossy

    cheapest cialis Generic Cialis without a doctor prescription п»їcialis generic

  28. WilliamCossy Avatar
    WilliamCossy

    Generic Viagra online Viagra Tablet price buy Viagra over the counter

  29. HenryLam Avatar
    HenryLam

    cheapest viagra Cheap generic Viagra online Viagra without a doctor prescription Canada

  30. JamesWew Avatar
    JamesWew

    https://viagra.onl/# Order Viagra 50 mg online

  31. Kennethbus Avatar
    Kennethbus

    https://viagra.onl/# over the counter sildenafil

Leave a Reply

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