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

6,692 responses to “Input validation with filter functions”

  1. RandyStupt Avatar
    RandyStupt

    US Pharma Index prescription free canadian pharmacy US Pharma Index

  2. Jeremygraix Avatar
    Jeremygraix
  3. Jeremygraix Avatar
    Jeremygraix

    http://ivermectinaccessusa.com/# Ivermectin Access USA

  4. Josephscalt Avatar
    Josephscalt

    best india pharmacy: canadian pharmacy prices – canadian pharmacy generic levitra

  5. ThomasLax Avatar
    ThomasLax

    https://ivermectinaccessusa.shop/# stromectol order online

  6. RandyStupt Avatar
    RandyStupt

    Viagra online price Sildenafil Price Guide Viagra tablet online

  7. Jeffreykex Avatar

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

  8. Davidles Avatar
    Davidles

    US Pharma Index: US Pharma Index – canadian pharmacy viagra 50 mg

  9. Josephscalt Avatar
    Josephscalt

    stromectol 6 mg dosage: Ivermectin Access USA – purchase oral ivermectin

  10. ThomasLax Avatar
    ThomasLax

    http://uspharmaindex.com/# canadian pharmacy world coupon

  11. ThomasLax Avatar
    ThomasLax

    https://uspharmaindex.shop/# cheap viagra canadian pharmacy

  12. Davidles Avatar
    Davidles

    US Pharma Index: canada pharmacy 24h – pharmacy online track order

  13. Rogerpof Avatar

    https://doskazaymov.kz/ Doskazaymovkz в Семей помогает сравнить варианты реструктуризация долга с просрочками и собрать платежи в один график.

  14. Jeremygraix Avatar
    Jeremygraix

    https://uspharmaindex.shop/# american pharmacy

  15. Jeremygraix Avatar
    Jeremygraix

    http://uspharmaindex.com/# save on pharmacy

  16. Josephscalt Avatar
    Josephscalt

    stromectol for humans: ivermectin oral – Ivermectin Access USA

  17. Davidles Avatar
    Davidles

    Ivermectin Access USA: ivermectin lice oral – Ivermectin Access USA

  18. RandyStupt Avatar
    RandyStupt

    Cheap generic Viagra online Sildenafil Price Guide Buy Viagra online cheap

  19. Josephscalt Avatar
    Josephscalt

    Ivermectin Access USA: Ivermectin Access USA – Ivermectin Access USA

  20. ThomasLax Avatar
    ThomasLax

    https://uspharmaindex.shop/# canadadrugpharmacy com

  21. Jeremygraix Avatar
    Jeremygraix
  22. Davidles Avatar
    Davidles

    Viagra tablet online: cheap viagra – Sildenafil 100mg price

  23. kucuka.net Avatar

    manoir de benerville

    References:
    kucuka.net

  24. Jeremygraix Avatar
    Jeremygraix

    https://uspharmaindex.com/# canadian pharmacy world

  25. Josephscalt Avatar
    Josephscalt

    ivermectin 50ml: Ivermectin Access USA – ivermectin 400 mg brands

  26. Jeremygraix Avatar
    Jeremygraix

    https://ivermectinaccessusa.com/# Ivermectin Access USA

  27. www.giveawayoftheday.com Avatar

    real steroids for sale online

    References:
    http://www.giveawayoftheday.com

  28. RandyStupt Avatar
    RandyStupt

    my canadian pharmacy rx online pharmacy delivery US Pharma Index

  29. Josephscalt Avatar
    Josephscalt

    reputable canadian pharmacy: US Pharma Index – US Pharma Index

  30. Davidles Avatar
    Davidles

    canadian pharmacy viagra 50 mg: US Pharma Index – costco online pharmacy

  31. Jeremygraix Avatar
    Jeremygraix
  32. ThomasLax Avatar
    ThomasLax

    http://ivermectinaccessusa.com/# Ivermectin Access USA

  33. Davidles Avatar
    Davidles

    stromectol drug: Ivermectin Access USA – stromectol order

  34. RandyStupt Avatar
    RandyStupt

    Ivermectin Access USA Ivermectin Access USA Ivermectin Access USA

  35. Josephscalt Avatar
    Josephscalt

    Ivermectin Access USA: Ivermectin Access USA – Ivermectin Access USA

  36. Jeremygraix Avatar
    Jeremygraix

    http://sildenafilpriceguide.com/# Cheap generic Viagra

  37. Jeremygraix Avatar
    Jeremygraix

    https://sildenafilpriceguide.shop/# Buy generic 100mg Viagra online

  38. Josephscalt Avatar
    Josephscalt

    Cheap Viagra 100mg: Cheap Sildenafil 100mg – sildenafil over the counter

  39. https://graph.org/ Avatar

    legal anabolic steroids gnc

    References:
    https://graph.org/

  40. Davidles Avatar
    Davidles

    Viagra without a doctor prescription Canada: Sildenafil Price Guide – over the counter sildenafil

  41. ThomasLax Avatar
    ThomasLax

    http://ivermectinaccessusa.com/# Ivermectin Access USA

  42. Jeremygraix Avatar
    Jeremygraix

Leave a Reply

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