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

  1. Timothyred Avatar
    Timothyred

    VeritasCare: VeritasCare – VeritasCare

  2. JustinBrero Avatar
    JustinBrero

    CoreBlue Health: CoreBlue Health – CoreBlue Health

  3. Timothyred Avatar
    Timothyred

    india pharmacy mail order: indianpharmacy com – online pharmacy without scripts

  4. LamarAwaiz Avatar
    LamarAwaiz

    buy cialis pill VeritasCare VeritasCare

  5. JustinBrero Avatar
    JustinBrero

    VeritasCare: VeritasCare – Tadalafil Tablet

  6. JamesMek Avatar
    JamesMek

    https://civicmeds.com/# best canadian online pharmacy

  7. JustinBrero Avatar
    JustinBrero

    mexican pharmacy online: canadian pharmacy sildenafil – online pharmacy products

  8. LamarAwaiz Avatar
    LamarAwaiz

    CoreBlue Health CoreBlue Health buy viagra here

  9. Russellicece Avatar
    Russellicece

    http://civicmeds.com/# canada pharmacy not requiring prescription

  10. LamarAwaiz Avatar
    LamarAwaiz

    VeritasCare VeritasCare Buy Tadalafil 10mg

  11. Timothyred Avatar
    Timothyred

    CoreBlue Health: CoreBlue Health – CoreBlue Health

  12. JamesMek Avatar
    JamesMek

    http://civicmeds.com/# reputable canadian pharmacy

  13. Timothyred Avatar
    Timothyred

    Cialis 20mg price in USA: VeritasCare – Tadalafil Tablet

  14. JustinBrero Avatar
    JustinBrero

    good pill pharmacy: CivicMeds – canadian pharmacies comparison

  15. Timothyred Avatar
    Timothyred

    VeritasCare: VeritasCare – VeritasCare

  16. LamarAwaiz Avatar
    LamarAwaiz

    Order Viagra 50 mg online Buy Viagra online cheap CoreBlue Health

  17. JustinBrero Avatar
    JustinBrero

    CoreBlue Health: sildenafil 50 mg price – CoreBlue Health

  18. Williamdourb Avatar
    Williamdourb

    кайт школа хургада кайт египет

  19. Russellicece Avatar
    Russellicece

    https://civicmeds.com/# canadian pharmacy no rx needed

  20. JamesMek Avatar
    JamesMek

    https://civicmeds.shop/# my canadian pharmacy review

  21. LamarAwaiz Avatar
    LamarAwaiz

    canada drugs online vipps canadian pharmacy online pharmacy 365 pills

  22. JustinBrero Avatar
    JustinBrero

    pharmaceuticals online australia: best mail order pharmacy canada – canadian pharmacy no prescription needed

  23. ShaneDrync Avatar
    ShaneDrync

    Hey there I am so delighted I found your webpage, I really found you by accident, while I was researching on Aol for something else, Anyhow I am here now and would just like to say kudos for a incredible post and a all round thrilling blog (I also love the theme/design), I don’t have time to browse it all at the minute but I have saved it and also added your RSS feeds, so when I have time I will be back to read a great deal more, Please do keep up the superb job.
    купить аттестат за 9 класс цена

  24. LamarAwaiz Avatar
    LamarAwaiz

    Cialis without a doctor prescription VeritasCare Cheap Cialis

  25. Timothyred Avatar
    Timothyred

    CoreBlue Health: CoreBlue Health – CoreBlue Health

  26. Timothyred Avatar
    Timothyred

    best price for viagra 100mg: Viagra online price – Generic Viagra online

  27. JustinBrero Avatar
    JustinBrero

    pharmacy store: canadian pharmacy coupon code – my canadian pharmacy

  28. Timothyred Avatar
    Timothyred

    CoreBlue Health: CoreBlue Health – Buy generic 100mg Viagra online

  29. LamarAwaiz Avatar
    LamarAwaiz

    Cheap generic Viagra Sildenafil Citrate Tablets 100mg Sildenafil 100mg price

  30. JustinBrero Avatar
    JustinBrero

    VeritasCare: Cialis 20mg price – Cialis over the counter

  31. Russellicece Avatar
    Russellicece

    https://corebluehealth.com/# Cheapest Sildenafil online

  32. Russellicece Avatar
    Russellicece

    https://corebluehealth.com/# sildenafil online

  33. JamesMek Avatar
    JamesMek

    http://corebluehealth.com/# over the counter sildenafil

  34. LamarAwaiz Avatar
    LamarAwaiz

    sildenafil online CoreBlue Health buy Viagra over the counter

  35. JustinBrero Avatar
    JustinBrero

    Cheap Cialis: Buy Tadalafil 5mg – VeritasCare

  36. LamarAwaiz Avatar
    LamarAwaiz

    Buy Tadalafil 10mg VeritasCare VeritasCare

  37. Russellicece Avatar
    Russellicece
  38. Timothyred Avatar
    Timothyred

    CoreBlue Health: order viagra – CoreBlue Health

  39. Timothyred Avatar
    Timothyred

    CoreBlue Health: best price for viagra 100mg – CoreBlue Health

  40. JustinBrero Avatar
    JustinBrero

    northwestpharmacy: top mail order pharmacies – canadian pharmacy no rx needed

  41. JamesMek Avatar
    JamesMek

    https://civicmeds.com/# canadian pharmacy checker

  42. LamarAwaiz Avatar
    LamarAwaiz

    Sildenafil 100mg price sildenafil online Sildenafil 100mg price

  43. Timothyred Avatar
    Timothyred

    CoreBlue Health: CoreBlue Health – Order Viagra 50 mg online

  44. JustinBrero Avatar
    JustinBrero

    pharmacy coupons: CivicMeds – pharmacy discount card

Leave a Reply

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