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,686 responses to “Input validation with filter functions”

  1. ThomasLax Avatar
    ThomasLax
  2. ThomasLax Avatar
    ThomasLax

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

  3. RandyStupt Avatar
    RandyStupt

    Generic Viagra online Sildenafil Price Guide best price for viagra 100mg

  4. Josephscalt Avatar
    Josephscalt

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

  5. Jeremygraix Avatar
    Jeremygraix

    https://ivermectinaccessusa.com/# stromectol tablet 3 mg

  6. Davidles Avatar
    Davidles

    Ivermectin Access USA: ivermectin generic name – Ivermectin Access USA

  7. Jeremygraix Avatar
    Jeremygraix

    http://sildenafilpriceguide.com/# Cheap Sildenafil 100mg

  8. Josephscalt Avatar
    Josephscalt

    Buy generic 100mg Viagra online: Sildenafil Price Guide – best price for viagra 100mg

  9. Davidles Avatar
    Davidles

    Ivermectin Access USA: Ivermectin Access USA – stromectol cvs

  10. ThomasLax Avatar
    ThomasLax

    https://ivermectinaccessusa.shop/# generic ivermectin cream

  11. RandyStupt Avatar
    RandyStupt

    order viagra Viagra online price viagra without prescription

  12. ThomasLax Avatar
    ThomasLax

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

  13. Josephscalt Avatar
    Josephscalt

    US Pharma Index: best online pharmacy reddit – online pharmacy australia paypal

  14. ThomasLax Avatar
    ThomasLax
  15. Davidles Avatar
    Davidles

    Ivermectin Access USA: Ivermectin Access USA – buy stromectol online uk

  16. Jeremygraix Avatar
    Jeremygraix
  17. Jeremygraix Avatar
    Jeremygraix

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

  18. Josephscalt Avatar
    Josephscalt

    Cheap Viagra 100mg: Sildenafil Price Guide – Generic Viagra for sale

  19. RandyStupt Avatar
    RandyStupt

    where to buy ivermectin stromectol 6 mg tablet ivermectin generic cream

  20. Jeremygraix Avatar
    Jeremygraix
  21. ThomasLax Avatar
    ThomasLax

    http://ivermectinaccessusa.com/# ivermectin 1% cream generic

  22. Davidles Avatar
    Davidles

    ivermectin brand: Ivermectin Access USA – Ivermectin Access USA

  23. Josephscalt Avatar
    Josephscalt

    order viagra: Viagra tablet online – Buy Viagra online cheap

  24. Davidles Avatar
    Davidles

    Cheap generic Viagra: Sildenafil Price Guide – cheapest viagra

  25. ThomasLax Avatar
    ThomasLax
  26. ThomasLax Avatar
    ThomasLax

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

  27. Jeremygraix Avatar
    Jeremygraix
  28. Josephscalt Avatar
    Josephscalt

    sildenafil over the counter: Sildenafil Price Guide – sildenafil over the counter

  29. Jeremygraix Avatar
    Jeremygraix
  30. RandyStupt Avatar
    RandyStupt

    buy viagra here Sildenafil Price Guide buy viagra here

  31. Davidles Avatar
    Davidles

    Ivermectin Access USA: Ivermectin Access USA – Ivermectin Access USA

  32. ThomasLax Avatar
    ThomasLax

    https://uspharmaindex.shop/# cheapest prescription pharmacy

  33. Josephscalt Avatar
    Josephscalt

    Buy generic 100mg Viagra online: sildenafil over the counter – buy Viagra online

  34. Josephscalt Avatar
    Josephscalt

    US Pharma Index: online pharmacy bc – US Pharma Index

  35. ThomasLax Avatar
    ThomasLax
  36. Jeremygraix Avatar
    Jeremygraix

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

  37. ThomasLax Avatar
    ThomasLax
  38. Davidles Avatar
    Davidles

    viagra without prescription: over the counter sildenafil – buy Viagra online

  39. Davidles Avatar
    Davidles

    Cheapest Sildenafil online: Sildenafil Price Guide – Order Viagra 50 mg online

  40. RandyStupt Avatar
    RandyStupt

    buy Viagra over the counter Cheapest Sildenafil online Viagra Tablet price

  41. Jeremygraix Avatar
    Jeremygraix
  42. Josephscalt Avatar
    Josephscalt

    ivermectin 500mg: Ivermectin Access USA – Ivermectin Access USA

  43. ThomasLax Avatar
    ThomasLax
  44. Josephscalt Avatar
    Josephscalt

    US Pharma Index: canada rx pharmacy – reputable canadian pharmacy

  45. Jeremygraix Avatar
    Jeremygraix

    https://sildenafilpriceguide.com/# over the counter sildenafil

  46. Jeremygraix Avatar
    Jeremygraix

    https://sildenafilpriceguide.com/# Cheap Sildenafil 100mg

  47. RandyStupt Avatar
    RandyStupt

    ivermectin lice Ivermectin Access USA Ivermectin Access USA

  48. ThomasLax Avatar
    ThomasLax

Leave a Reply

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