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

1,384 responses to “Input validation with filter functions”

  1. Tristanced Avatar

    EveraMeds EveraMeds EveraMeds

  2. IsmaelOntom Avatar

    тонировка в москве Тонировка Авто в Москве: Комфорт и Приватность на Дорогах Тонировка авто в Москве – это не только стильный аксессуар, но и защита от солнца, жары и посторонних взглядов. Тонировка создает комфортную атмосферу в салоне автомобиля и повышает безопасность вождения.

  3. Davidbluth Avatar
    Davidbluth

    online pharmacy for Kamagra: trusted Kamagra supplier in the US – Blue Wave Meds

  4. Tristanced Avatar

    order Kamagra discreetly online pharmacy for Kamagra BlueWaveMeds

  5. Davidbluth Avatar
    Davidbluth

    AeroMedsRx: viagra without prescription – Cheap generic Viagra online

  6. ZacharyIneks Avatar
    ZacharyIneks

    https://aeromedsrx.com/# Order Viagra 50 mg online

  7. Tristanced Avatar

    EveraMeds Tadalafil price Generic Cialis price

  8. Kennethbex Avatar

    best price for viagra 100mg: AeroMedsRx – Generic Viagra online

  9. Davidbluth Avatar
    Davidbluth

    BlueWaveMeds: order Kamagra discreetly – buy Kamagra online

  10. MatthewFlura Avatar
    MatthewFlura

    перевод документов список онлайн перевод документов

  11. RichardFap Avatar
    RichardFap

    reliable canadian pharmacy https://uvapharm.xyz/# UvaPharm

  12. RobertMumma Avatar

    safe online pharmacies in canada: canada drugs – MHFA Pharm

  13. RichardFap Avatar
    RichardFap

    cheap canadian pharmacy https://isoindiapharm.xyz/# IsoIndiaPharm

  14. RobertMumma Avatar

    buy medicines online in india: Iso Pharm – Iso Pharm

  15. Hunteramato Avatar

    MHFA Pharm: MhfaPharm – MhfaPharm

  16. IsmaelOntom Avatar

    ремонт двигателя москва Тонировка в Москве: Профессиональное Затемнение Стекол Тонировка в Москве – это профессиональная установка тонировочной пленки на стекла автомобиля. Квалифицированные мастера используют качественные материалы и соблюдают все требования законодательства.

  17. Hunteramato Avatar

    canadian pharmacy com: canadian pharmacy mall – MHFA Pharm

  18. RichardFap Avatar
    RichardFap

    canada rx pharmacy world https://mhfapharm.com/# MhfaPharm

  19. Herbertmig Avatar

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

  20. MylesDub Avatar

    проститутка александра Проститутки Петербурга, разнообразие предложений и услуг, от классических встреч до экзотических вариантов. Проститутки Санкт, краткое и емкое обозначение сферы интимных услуг в городе. Проститутки Санкт Петербург, полное название города подчеркивает масштабность выбора. Проститутка метро, удобный способ найти компаньонку в шаговой доступности от станций метрополитена. Снять проститутку, ключевое действие для тех, кто ищет интимные развлечения. Снят проститутка, результат успешно совершенной сделки. Проститутки индивидуалки, выбор в пользу независимых работниц, предлагающих персональный подход. Дешевые проститутки, бюджетный вариант для тех, кто ценит экономию. Зрелые проститутки, опыт и мастерство для искушенных клиентов.

  21. mdgt-208 Avatar

    Търсех https://mdgt.top как се регулира ПВЦ дограма и попаднах на подробна статия там

  22. Timothyvom Avatar

    Replika Zeitmesser kaufen Manner Uhr Replika: Stilvolle Accessoires fur den modernen Mann Manner Uhr Replika bieten eine breite Palette an Designs, von sportlich und robust bis hin zu elegant und klassisch. Ob fur den taglichen Gebrauch, besondere Anlasse oder als Statussymbol – es gibt fur jeden Mann die passende Replika Uhr. Diese Uhren sind nicht nur stilvoll, sondern auch funktional und

  23. RobertMumma Avatar

    MhfaPharm: MHFA Pharm – canadian mail order pharmacy

  24. RichardFap Avatar
    RichardFap

    canadian pharmacy online https://mhfapharm.xyz/# MhfaPharm

  25. ForestKef Avatar

    п»їlegitimate online pharmacies india IsoIndiaPharm Iso Pharm

  26. RobertMumma Avatar

    indian pharmacy paypal: Iso Pharm – indian pharmacy paypal

Leave a Reply

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