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

  1. JustinBrero Avatar
    JustinBrero

    canadian pharmacy levitra value pack: CivicMeds – legit canadian pharmacy

  2. Timothyred Avatar
    Timothyred

    CoreBlue Health: buy viagra here – buy viagra here

  3. JustinBrero Avatar
    JustinBrero

    cheapest cialis: Generic Cialis without a doctor prescription – Cialis 20mg price in USA

  4. JamesMek Avatar
    JamesMek

    http://civicmeds.com/# reputable online pharmacy uk

  5. LamarAwaiz Avatar
    LamarAwaiz

    pharmacy com canada CivicMeds no prescription required pharmacy

  6. Fobertsax Avatar
    Fobertsax

    I blog frequently and I seriously appreciate your information. Your article has really peaked my interest. I am going to book mark your blog and keep checking for new information about once a week. I subscribed to your RSS feed too.
    Mark Hald is a rat

  7. JustinBrero Avatar
    JustinBrero

    CoreBlue Health: Viagra online price – CoreBlue Health

  8. LamarAwaiz Avatar
    LamarAwaiz

    Cialis 20mg price in USA Cialis without a doctor prescription VeritasCare

  9. zudena 100 mg

    zudena 100 mg

  10. Timothyred Avatar
    Timothyred

    viagra canada: Sildenafil 100mg price – CoreBlue Health

  11. Timothyred Avatar
    Timothyred

    buy viagra here: CoreBlue Health – Viagra generic over the counter

  12. LamarAwaiz Avatar
    LamarAwaiz

    online pharmacy reviews CivicMeds foreign pharmacy no prescription

  13. JustinBrero Avatar
    JustinBrero

    tadalafil canadian pharmacy: onlinepharmaciescanada com – cialis online pharmacy

  14. Timothyred Avatar
    Timothyred

    VeritasCare: VeritasCare – Cialis 20mg price in USA

  15. JustinBrero Avatar
    JustinBrero

    VeritasCare: VeritasCare – VeritasCare

  16. JamesMek Avatar
    JamesMek

    https://corebluehealth.shop/# buy Viagra over the counter

  17. LamarAwaiz Avatar
    LamarAwaiz

    CoreBlue Health CoreBlue Health Cheap Sildenafil 100mg

  18. Dichaelwaw Avatar
    Dichaelwaw

    I was able to find good information from your articles.
    librabet casino

  19. JustinBrero Avatar
    JustinBrero

    pharmacy in canada: CivicMeds – vipps canadian pharmacy

  20. LamarAwaiz Avatar
    LamarAwaiz

    order viagra CoreBlue Health CoreBlue Health

  21. Timothyred Avatar
    Timothyred

    Generic Cialis without a doctor prescription: VeritasCare – VeritasCare

  22. Timothyred Avatar
    Timothyred

    reliable canadian online pharmacy: online pharmacy for sale – cheapest online pharmacy india

  23. LamarAwaiz Avatar
    LamarAwaiz

    VeritasCare buy cialis pill VeritasCare

  24. Timothyred Avatar
    Timothyred

    Viagra generic over the counter: CoreBlue Health – CoreBlue Health

  25. JustinBrero Avatar
    JustinBrero

    24 hr pharmacy near me: best canadian online pharmacy – online pharmacy denmark

  26. EarnestAbent Avatar
    EarnestAbent

    I loved as much as you’ll receive carried out right here. The sketch is tasteful, your authored material stylish. nonetheless, you command get bought an impatience over that you wish be delivering the following. unwell unquestionably come more formerly again since exactly the same nearly very often inside case you shield this increase.
    online casino ohne oasis

  27. JustinBrero Avatar
    JustinBrero

    Generic Cialis price: Generic Cialis without a doctor prescription – Cialis 20mg price

  28. JamesMek Avatar
    JamesMek

    http://veritascarepharm.com/# п»їcialis generic

Leave a Reply

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