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

  1. RandyLew Avatar
    RandyLew

    http://usmedsoutlet.com/# canadapharmacyonline com

  2. WilliamNex Avatar
    WilliamNex

    BajaMed Direct: online pharmacy mexico – BajaMed Direct

  3. WilliamNex Avatar
    WilliamNex

    canadian pharmacy coupon: online pharmacy pain – US Meds Outlet

  4. KeithErath Avatar

    казино бонус Фриспины без депозита – это один из самых популярных видов бездепозитных бонусов. Они представляют собой определенное количество бесплатных вращений, которые можно использовать на конкретных игровых автоматах. Это отличный способ начать играть без риска.

  5. HarryZoowl Avatar
    HarryZoowl

    BajaMed Direct: purple pharmacy mexico – BajaMed Direct

  6. MarvinJapse Avatar

    Продать эпклюза Продать Зенлистик. Ингибитор JAK1.

  7. JeromeWhert Avatar

    Продать лекарства на выгодных условиях Продать лекарства в спб. Надежный партнер по продаже медикаментов в Санкт-Петербурге.

  8. Davidlok Avatar

    Общаются Искал Ростов знакомства в телеграме — нашёл нормальный чат.

  9. StephenPep Avatar
    StephenPep

    mexico pharmacy price list order meds from mexico BajaMed Direct

  10. RandyLew Avatar
    RandyLew

    https://bajameddirect.com/# mexican pharmacies near me

  11. RandyLew Avatar
    RandyLew

    https://indogenericexport.shop/# methocarbamol robaxin

  12. HarryZoowl Avatar
    HarryZoowl

    medication in mexico: los algodones pharmacy online – medication from mexico

  13. WilliamNex Avatar
    WilliamNex

    US Meds Outlet: script pharmacy – legitimate canadian pharmacies

  14. Cedricklit Avatar

    бездепозитные фриспины Мы понимаем, насколько привлекательна идея бесплатных вращений, поэтому предлагаем вам бездепозитные фриспины. Это прямой путь к захватывающим раундам в лучших слот-играх, где каждая линия выплат может стать вашим билетом к крупному выигрышу. Начните играть прямо сейчас и ощутите всю мощь удачи!

  15. WilliamNex Avatar
    WilliamNex

    mexican online pharmacies: pharmacy online – mexican rx pharm

  16. HarryZoowl Avatar
    HarryZoowl

    mexican mail order pharmacy: BajaMed Direct – mexican pharmacy near me

  17. KevinKip Avatar

    поиск работы удаленная работа на дому

  18. pad.stuve.de Avatar

    References:

    Grand west casino

    References:
    pad.stuve.de

  19. RandyLew Avatar
    RandyLew

    http://indogenericexport.com/# otc muscle relaxer

  20. RonaldCrido Avatar

    Первый депозит 1000 рублей получил бонус 150% плюс 150 FS. Хороший стартовый пакет для новичков.

  21. Davidlok Avatar

    знакомятся Искал Ростов знакомства в телеграме — нашёл нормальный чат.

  22. StephenPep Avatar
    StephenPep

    pharmacy coupons best canadian pharmacy no prescription walmart online pharmacy

  23. RandyLew Avatar
    RandyLew

    http://usmedsoutlet.com/# indian pharmacy

  24. HarryZoowl Avatar
    HarryZoowl

    US Meds Outlet: canadian pharmacy sarasota – US Meds Outlet

  25. WilliamNex Avatar
    WilliamNex

    US Meds Outlet: US Meds Outlet – canadian pharmacy ed medications

  26. Matthewknino Avatar

    промокоды на бездеп Участвуйте в партнерских программах и аффилиат-сайтах. Ресурсы вроде casino-gid.best, Casino.ru или специализированные блоги публикуют свежие промокоды с реферальными ссылками. Переходите по ним при регистрации — бонус будет больше. Также проверяйте форумы (например, Reddit или русскоязычные Gambling forum) и Telegram-боты, где игроки делятся рабочими кодами. Но будьте осторожны: используйте только проверенные источники, чтобы избежать мошенников.

  27. AbrahamzeNty Avatar

    Кресты с пожарной подставкой фланцевые чугунные ППКФ Для электромонтажных работ предлагаем кабель ВВГнг, а для гидроизоляции – битумную гидроизоляционную мастику. Среди специализированных материалов для покрытий – Галоплен, Политон и Цинотан.

  28. WilliamNex Avatar
    WilliamNex

    US Meds Outlet: US Meds Outlet – canadian pharmacy meds

  29. TerryJat Avatar

    Севастополь Электрик Севастополь

  30. StephenPep Avatar
    StephenPep

    US Meds Outlet US Meds Outlet US Meds Outlet

  31. HarryZoowl Avatar
    HarryZoowl

    online pharmacy canada: pharmacy coupons – US Meds Outlet

  32. RonaldCrido Avatar

    Бонусы щедрые, но реальные. 7k казино рабочее зеркало не как у некоторых казино, где вейджер невозможный.

  33. Jameslonge Avatar

    1000 рублей за регистрацию вывод сразу Такие акции обновляются ежемесячно, так что торопитесь! Переходите по проверенной ссылке, регистрируйтесь и выводите 1000 руб. прямо сейчас. Ваш первый выигрыш ждет — без вложений, с мгновенным кэшаутом!

  34. HarryZoowl Avatar
    HarryZoowl

    top online pharmacy india: indian pharmacy paypal – best online pharmacy india

  35. Cedricklit Avatar

    фриспины за регистрацию Особое внимание мы уделяем тем, кто ценит свободу и предпочитает знакомиться с игрой на ходу. Именно для вас мы подготовили фриспины за регистрацию – бесценные вращения, которые позволят вам лично оценить разнообразие игровых автоматов, не делая при этом никаких финансовых вложений. Это отличный старт для новичков и приятное дополнение для опытных игроков, желающих протестировать новые игры.

  36. WilliamNex Avatar
    WilliamNex

    cheapest pharmacy for prescriptions: US Meds Outlet – US Meds Outlet

  37. WilliamNex Avatar
    WilliamNex

    US Meds Outlet: US Meds Outlet – cheapest pharmacy prescription drugs

  38. RandyLew Avatar
    RandyLew

    http://bajameddirect.com/# progreso mexico pharmacy online

  39. HarryZoowl Avatar
    HarryZoowl

    US Meds Outlet: online med pharmacy – indianpharmacy com

  40. StephenPep Avatar
    StephenPep

    precription drugs from canada online pharmacy ordering medical pharmacy south

Leave a Reply

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