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

  1. Timothyred Avatar
    Timothyred

    online pharmacy no prescription needed: online pharmacy group – canadian drugs pharmacy

  2. LamarAwaiz Avatar
    LamarAwaiz

    Cheap Sildenafil 100mg CoreBlue Health Viagra online price

  3. Timothyred Avatar
    Timothyred

    sildenafil online: Generic Viagra for sale – CoreBlue Health

  4. RichardUtize Avatar
    RichardUtize

    Официальная ссылка маркетплейса “Зелёный Мир”

    3мир

  5. JustinBrero Avatar
    JustinBrero

    VeritasCare: VeritasCare – Buy Tadalafil 20mg

  6. Timothyred Avatar
    Timothyred

    Sildenafil 100mg price: Cheap Viagra 100mg – Sildenafil Citrate Tablets 100mg

  7. LamarAwaiz Avatar
    LamarAwaiz

    reputable canadian pharmacy CivicMeds online pharmacy australia paypal

  8. JustinBrero Avatar
    JustinBrero

    Generic Cialis price: Cialis over the counter – cialis for sale

  9. LamarAwaiz Avatar
    LamarAwaiz

    Cheapest Sildenafil online CoreBlue Health CoreBlue Health

  10. RichardUtize Avatar
    RichardUtize

    Официальная ссылка маркетплейса “Зелёный Мир”

    зеленый мир раста

  11. JustinBrero Avatar
    JustinBrero

    Viagra generic over the counter: CoreBlue Health – CoreBlue Health

  12. Russellicece Avatar
    Russellicece

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

  13. LamarAwaiz Avatar
    LamarAwaiz

    trustworthy canadian pharmacy medical mall pharmacy canadian pharmacy online reviews

  14. Timothyred Avatar
    Timothyred

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

  15. Timothyred Avatar
    Timothyred

    VeritasCare: VeritasCare – VeritasCare

  16. Russellicece Avatar
    Russellicece
  17. JustinBrero Avatar
    JustinBrero

    Generic Viagra online: Generic Viagra online – CoreBlue Health

  18. Timothyred Avatar
    Timothyred

    VeritasCare: VeritasCare – VeritasCare

  19. LamarAwaiz Avatar
    LamarAwaiz

    buy Viagra online Cheapest Sildenafil online CoreBlue Health

  20. JustinBrero Avatar
    JustinBrero

    VeritasCare: Tadalafil price – VeritasCare

  21. LamarAwaiz Avatar
    LamarAwaiz

    viagra canada Cheap Sildenafil 100mg CoreBlue Health

  22. Russellicece Avatar
    Russellicece

    http://civicmeds.com/# pharmacy websites

  23. JustinBrero Avatar
    JustinBrero

    VeritasCare: cheapest cialis – cialis for sale

  24. LamarAwaiz Avatar
    LamarAwaiz

    Generic Viagra online Viagra without a doctor prescription Canada CoreBlue Health

  25. Timothyred Avatar
    Timothyred

    Tadalafil price: VeritasCare – VeritasCare

  26. Timothyred Avatar
    Timothyred

    CoreBlue Health: Order Viagra 50 mg online – CoreBlue Health

  27. JustinBrero Avatar
    JustinBrero

    Cheapest Sildenafil online: Viagra Tablet price – CoreBlue Health

  28. LamarAwaiz Avatar
    LamarAwaiz

    sildenafil online Cheap Sildenafil 100mg CoreBlue Health

  29. Timothyred Avatar
    Timothyred

    california pharmacy: canadian pharmacy uk delivery – canadian pharmacy cialis

  30. JustinBrero Avatar
    JustinBrero

    VeritasCare: Generic Tadalafil 20mg price – VeritasCare

  31. JamesMek Avatar
    JamesMek

    https://civicmeds.shop/# best online pharmacy india

  32. LamarAwaiz Avatar
    LamarAwaiz

    CoreBlue Health sildenafil over the counter CoreBlue Health

  33. JustinBrero Avatar
    JustinBrero

    п»їcialis generic: Generic Cialis price – VeritasCare

Leave a Reply

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