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

7,244 responses to “Input validation with filter functions”

  1. Thomaswes Avatar
    Thomaswes

    https://usmedssaver.com/# best canadian pharmacy to order from

  2. DavidZed Avatar
    DavidZed

    https://usmedssaver.shop/# best rx pharmacy online

  3. DavidZed Avatar
    DavidZed

    http://bajarxdirect.com/# online pharmacy

  4. WilliamImpek Avatar
    WilliamImpek

    BajaRx Direct order antibiotics from mexico mexican drugstore

  5. Jamessoich Avatar
    Jamessoich

    BajaRx Direct: best mexican online pharmacy – BajaRx Direct

  6. Thomaswes Avatar
    Thomaswes

    http://certifiednorthrx.com/# canadian online drugs

  7. Thomaswes Avatar
    Thomaswes

    http://certifiednorthrx.com/# canada drugs reviews

  8. DavidZed Avatar
    DavidZed

    http://usmedssaver.com/# canada pharmacy coupon

  9. Franciswar Avatar
    Franciswar

    BajaRx Direct: mexico rx – mexico rx

  10. Franciswar Avatar
    Franciswar

    Certified North Rx: Certified North Rx – canadian online drugstore

  11. Jamessoich Avatar
    Jamessoich

    canada drugs reviews: canadian pharmacy uk delivery – best canadian pharmacy to buy from

  12. Thomaswes Avatar
    Thomaswes
  13. DavidZed Avatar
    DavidZed

    http://usmedssaver.com/# cialis canadian pharmacy

  14. DavidZed Avatar
    DavidZed

    https://certifiednorthrx.shop/# canadian pharmacy no scripts

  15. WilliamImpek Avatar
    WilliamImpek

    Certified North Rx canadian pharmacy prices canada cloud pharmacy

  16. ScottAudip Avatar

    установка сигнализации с автозапуском цена Мы предлагаем различные варианты установки сигнализации на автомобиль, от базовых моделей до продвинутых систем с GPS-модулями и интеграцией со смартфонами, чтобы каждый клиент мог выбрать оптимальное решение.

  17. Thomaswes Avatar
    Thomaswes
  18. Thomaswes Avatar
    Thomaswes
  19. Franciswar Avatar
    Franciswar

    www canadianonlinepharmacy: Certified North Rx – canadian pharmacies online

  20. Jamessoich Avatar
    Jamessoich

    BajaRx Direct: online pharmacies – mexican medicine

  21. FrankPef Avatar

    Сигнализация c автозапуском на Lexus RX Охранная система и сигнализация c автозапуском была установлена на Лексус RX в нашем установочном центре.

  22. Franciswar Avatar
    Franciswar

    onlinepharmaciescanada com: Certified North Rx – Certified North Rx

  23. WilliamImpek Avatar
    WilliamImpek

    Certified North Rx canada drugs reviews canadian discount pharmacy

  24. Jamessoich Avatar
    Jamessoich

    reddit canadian pharmacy: US Meds Saver – safe canadian pharmacy

  25. DavidZed Avatar
    DavidZed

    https://usmedssaver.shop/# legal online pharmacy coupon code

  26. DavidZed Avatar
    DavidZed
  27. ScottAudip Avatar

    установка автосигнализации Наша цель – предоставить клиентам не просто сигнализацию, а комплексное решение для безопасности, включающее в себя консультацию, подбор оборудования и профессиональную установку автосигнализации с автозапуском по выгодной стоимости.

  28. Thomaswes Avatar
    Thomaswes

    http://bajarxdirect.com/# purple pharmacy mexico

  29. WilliamImpek Avatar
    WilliamImpek

    Certified North Rx Certified North Rx Certified North Rx

  30. Thomaswes Avatar
    Thomaswes

    http://certifiednorthrx.com/# canadapharmacyonline

  31. Thomaswes Avatar
    Thomaswes

    https://bajarxdirect.com/# order medication from mexico

  32. Franciswar Avatar
    Franciswar

    cheapest pharmacy to get prescriptions filled: US Meds Saver – safe canadian pharmacy

  33. DavidZed Avatar
    DavidZed
  34. Jamessoich Avatar
    Jamessoich

    reputable mexican pharmacy: buying prescription drugs in mexico – prescriptions from mexico

  35. Franciswar Avatar
    Franciswar

    Certified North Rx: canadian pharmacy uk delivery – Certified North Rx

  36. DavidZed Avatar
    DavidZed

    https://certifiednorthrx.shop/# canadian pharmacy drugs online

  37. DavidZed Avatar
    DavidZed

    http://usmedssaver.com/# canadian pharmacy review

  38. Thomaswes Avatar
    Thomaswes

    https://bajarxdirect.shop/# can i order online from a mexican pharmacy

Leave a Reply

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