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

10,662 responses to “Input validation with filter functions”

  1. JustinBrero Avatar
    JustinBrero

    Buy Cialis online: Cialis without a doctor prescription – cheapest cialis

  2. JamesMek Avatar
    JamesMek

    https://civicmeds.com/# online pharmacy no prescription

  3. LamarAwaiz Avatar
    LamarAwaiz

    best online pharmacy reddit online pharmacy without scripts legal online pharmacy

  4. www.bmw-workshop.com Avatar

    hexadrone before and after

    References:
    http://www.bmw-workshop.com

  5. Russellicece Avatar
    Russellicece
  6. Timothyred Avatar
    Timothyred

    cross border pharmacy canada: CivicMeds – canadian king pharmacy

  7. Timothyred Avatar
    Timothyred

    safe reliable canadian pharmacy: CivicMeds – online pharmacy reddit

  8. Russellicece Avatar
    Russellicece

    https://veritascarepharm.shop/# Cialis over the counter

  9. JustinBrero Avatar
    JustinBrero

    uk pharmacy no prescription: cheap scripts pharmacy – professional pharmacy

  10. LamarAwaiz Avatar
    LamarAwaiz

    Viagra generic over the counter buy Viagra over the counter CoreBlue Health

  11. Timothyred Avatar
    Timothyred

    CoreBlue Health: CoreBlue Health – generic sildenafil

  12. JustinBrero Avatar
    JustinBrero

    online pharmacy ed: CivicMeds – online pharmacy store

  13. Russellicece Avatar
    Russellicece

    https://civicmeds.shop/# trustworthy canadian pharmacy

  14. LamarAwaiz Avatar
    LamarAwaiz

    Cialis 20mg price VeritasCare Cialis over the counter

  15. JustinBrero Avatar
    JustinBrero

    CoreBlue Health: CoreBlue Health – CoreBlue Health

  16. JamesMek Avatar
    JamesMek

    https://corebluehealth.shop/# Sildenafil Citrate Tablets 100mg

  17. LamarAwaiz Avatar
    LamarAwaiz

    best online thai pharmacy ez pharmacy best rated canadian pharmacy

  18. Timothyred Avatar
    Timothyred

    CoreBlue Health: CoreBlue Health – Viagra online price

  19. Williamdourb Avatar
    Williamdourb

    кайт станции кайт сафари

  20. Timothyred Avatar
    Timothyred

    Viagra tablet online: buy Viagra online – Cheapest Sildenafil online

  21. ücretsiz binance hesabi Avatar

    Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.

  22. JustinBrero Avatar
    JustinBrero

    VeritasCare: VeritasCare – Generic Tadalafil 20mg price

  23. LamarAwaiz Avatar
    LamarAwaiz

    CoreBlue Health Viagra online price generic sildenafil

  24. Timothyred Avatar
    Timothyred

    us pharmacy no prescription: canadian pharmacy online cialis – canadian pharmacy 24

  25. JustinBrero Avatar
    JustinBrero

    CoreBlue Health: CoreBlue Health – CoreBlue Health

  26. JamesMek Avatar
    JamesMek

    http://civicmeds.com/# legit online pharmacy

  27. Russellicece Avatar
    Russellicece
  28. LarryMUS Avatar

    дешевые проститутки бишкека дешевые проститутки бишкека

  29. LamarAwaiz Avatar
    LamarAwaiz

    mail pharmacy CivicMeds canada pharmacy world

  30. JustinBrero Avatar
    JustinBrero

    best canadian pharmacy for viagra: safe online pharmacy – wholesale pharmacy

  31. LamarAwaiz Avatar
    LamarAwaiz

    VeritasCare VeritasCare Generic Cialis price

  32. JamesMek Avatar
    JamesMek

    https://civicmeds.com/# best mail order pharmacy canada

  33. Timothyred Avatar
    Timothyred

    onlinecanadianpharmacy 24: canadian pharmacy ltd – sky pharmacy

  34. Timothyred Avatar
    Timothyred

    canada pharmacy 24h: CivicMeds – canada online pharmacy

  35. LamarAwaiz Avatar
    LamarAwaiz

    CoreBlue Health Cheap Viagra 100mg sildenafil 50 mg price

  36. JustinBrero Avatar
    JustinBrero

    Viagra Tablet price: CoreBlue Health – sildenafil online

  37. JustinBrero Avatar
    JustinBrero

    VeritasCare: Buy Tadalafil 10mg – VeritasCare

  38. LamarAwaiz Avatar
    LamarAwaiz

    Sildenafil Citrate Tablets 100mg CoreBlue Health Viagra online price

  39. JustinBrero Avatar
    JustinBrero

    cialis for sale: Cialis 20mg price in USA – Buy Tadalafil 10mg

  40. LamarAwaiz Avatar
    LamarAwaiz

    Cialis 20mg price Buy Tadalafil 20mg Cialis 20mg price in USA

  41. Matthewneisa Avatar

    кайт сафари обучение кайтсёрфингу

  42. Timothyred Avatar
    Timothyred

    canada drugs coupon code: CivicMeds – capsule online pharmacy

  43. JamesMek Avatar
    JamesMek
  44. Timothyred Avatar
    Timothyred

    Generic Viagra online: Cheapest Sildenafil online – CoreBlue Health

  45. LamarAwaiz Avatar
    LamarAwaiz

    CoreBlue Health CoreBlue Health cheap viagra

Leave a Reply

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