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

4,835 responses to “Input validation with filter functions”

  1. TracyThics Avatar
    TracyThics

    https://smartgenrxusa.com/# trusted online pharmacy

  2. LarryViofs Avatar
    LarryViofs

    sertraline zoloft: zoloft without rx – zoloft without rx

  3. Vancestext Avatar

    Страхование титут Следуйте своей собственной догме – инвестируйте в качество жизни, выбирая недвижимость, которая будет радовать вас долгие годы.

  4. Charleshox Avatar

    ремонт тормозных суппортов Мы осуществляем проточку тормозных дисков в районах Отрадное, Свиблово, Медведково, а также в Мытищах, ВДНХ и Алтуфьево.

  5. Leonarddeark Avatar
    Leonarddeark

    zoloft generic sertraline buy zoloft

  6. LinwoodTwirl Avatar
    LinwoodTwirl

    buy zoloft: zoloft generic – zoloft without rx

  7. LinwoodTwirl Avatar
    LinwoodTwirl

    zoloft tablet: sertraline zoloft – zoloft cheap

  8. TracyThics Avatar
    TracyThics
  9. TracyThics Avatar
    TracyThics
  10. GlennTix Avatar
    GlennTix

    https://neuroreliefusa.com/# buy neurontin online no prescription

  11. LarryViofs Avatar
    LarryViofs

    neurontin 50 mg: neurontin cost – neurontin cap

  12. LarryViofs Avatar
    LarryViofs

    cheapest pharmacy for prescription drugs: Smart GenRx USA – pharmacy no prescription required

  13. TracyThics Avatar
    TracyThics
  14. LinwoodTwirl Avatar
    LinwoodTwirl

    Neuro Relief USA: Neuro Relief USA – how much is generic neurontin

  15. Leonarddeark Avatar
    Leonarddeark

    ivermectin 5 mg Iver Therapeutics ivermectin 4

  16. HubertMum Avatar

    Ремонт электрики Севастополь Мы гордимся тем, что предлагаем услуги электрика Севастополь недорого, при этом сохраняя высочайшее качество работы.

  17. Geralddow Avatar

    цао проточка тормозных дисков Наши мастера также готовы выехать в районы СВАО, САО и ЦАО, а также в Медведково, чтобы провести необходимую работу на месте.

  18. LinwoodTwirl Avatar
    LinwoodTwirl

    zoloft cheap: zoloft pill – zoloft without rx

  19. TracyThics Avatar
    TracyThics
  20. TracyThics Avatar
    TracyThics

    https://smartgenrxusa.shop/# canada pharmacy 24h

  21. LarryViofs Avatar
    LarryViofs

    Iver Therapeutics: ivermectin buy – Iver Therapeutics

  22. DanielbeS Avatar

    Футбольные ставки Expert tipsters deliver betting tips on sports games and matches including Fixed game selections and correct score best exacte forecast. Vip and free bets are available daily with sureshot odds and accumulator real

  23. MichaelVes Avatar

    Европейские онлайн-казино Ключевым отличием и одновременно главным вызовом этого ландшафта является вопрос лицензирования. Вместо привычных европейских регуляторов, здесь царит мозаика авторитетов — от солидной Комиссии по азартным играм Кюрасао, чья лицензия является своего рода международным паспортом, до более экзотических разрешений от властей Костa-Рики, Панамы или о. Мэн. Каждая такая лицензия несет в себе собственную философию: одни делают акцент на минимальном вмешательстве, предоставляя операторам свободу в построении бизнеса, другие — напротив, выстраивают строгие рамки для защиты игрока. Искусство выбора зарубежного казино начинается именно с дешифровки этого кода. Опытный взгляд оценит не только наличие «бумаги», но и ее авторитет, а также то, как оператор соблюдает дух, а не букву предписаний. Премиальные зарубежные площадки давно поняли, что доверие — валюта дороже любой рекламы, и потому добровольно проходят аудиты у независимых лабораторий, внедряют системы честной игры с публикацией отчётов о доходности слотов и организуют службы поддержки, работающие не как фильтр, а как настоящий мост между игроком и администрацией.

  24. GlennTix Avatar
    GlennTix

    https://sertralineusa.com/# sertraline zoloft

  25. TracyThics Avatar
    TracyThics

    http://neuroreliefusa.com/# neurontin 600 mg price

  26. RonaldCrido Avatar

    Вывел 5000 рублей в USDT, пришло ровно за 45 минут. Отличная платформа для серьезной игры.

  27. Charlesden Avatar

    https://spisok-kreditov.ru/ На досказаймов удобно сравнить автокредит по платежу, сроку и первому взносу.

  28. Leonarddeark Avatar
    Leonarddeark

    neurontin 800 mg tablet Neuro Relief USA Neuro Relief USA

  29. LarryViofs Avatar
    LarryViofs

    indian trail pharmacy: Smart GenRx USA – Smart GenRx USA

  30. LinwoodTwirl Avatar
    LinwoodTwirl

    Iver Therapeutics: Iver Therapeutics – Iver Therapeutics

Leave a Reply

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