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

3,920 responses to “Input validation with filter functions”

  1. Joshuabeivy Avatar
    Joshuabeivy

    Chao c? nha, bac nao mu?n tim c?ng game khong b? ch?n d? g? g?c Da Ga thi xem th? d?a ch? nay. Uy tin luon: BJ88. V? b? thanh cong.

  2. Kevinhox Avatar
    Kevinhox

    Chao anh em, bac nao mu?n tim nha cai uy tin d? g? g?c Da Ga thi vao ngay ch? nay. Dang co khuy?n mai: bj88. Chuc cac bac r?c r?.

  3. Anthonykeype Avatar
    Anthonykeype

    Hello mọi người, nếu anh em đang kiếm chỗ nạp rút nhanh để cày cuốc Đá Gà đừng bỏ qua trang này nhé. Tốc độ bàn thờ: https://homemaker.org.in/#. Về bờ thành công.

  4. Joshuabeivy Avatar
    Joshuabeivy

    Hello m?i ngu?i, ai dang tim c?ng game khong b? ch?n d? gi?i tri Da Ga thi xem th? trang nay nhe. T?c d? ban th?: https://homemaker.org.in/#. V? b? thanh cong.

  5. Brianfew Avatar

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

  6. Anthonykeype Avatar
    Anthonykeype

    Hello mọi người, bác nào muốn tìm chỗ nạp rút nhanh để cày cuốc Tài Xỉu thì vào ngay chỗ này. Uy tín luôn: Link tải Sunwin. Chúc các bác rực rỡ.

  7. Stephengrina Avatar
    Stephengrina

    Hello mọi người, người anh em nào cần sân chơi đẳng cấp để chơi Đá Gà thì tham khảo chỗ này. Tốc độ bàn thờ: Sunwin web. Chiến thắng nhé.

  8. Shaunsuirm Avatar

    L’offre promotionnelle 1xBet permet d’obtenir un doublement du premier depot pouvant atteindre 100 €/$. Meme si aucun code n’est utilise, un bonus standard sera applique le bonus initial prevu. Pour en savoir davantage concernant le code bonus 1xbet, suivez le lien ici : https://hetkoningshofje.com/article/le_code_promo_1xbet_bonus.html

  9. Davidfueta Avatar

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

  10. Brianfew Avatar

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

  11. Louisboype Avatar
    Louisboype

    Hello mọi người, ai đang tìm nhà cái uy tín để chơi Tài Xỉu thì vào ngay con hàng này. Đang có khuyến mãi: Tải app Dola789. Chiến thắng nhé.

  12. ThomasgUh Avatar

    Промокод при регистрации в 1xbet сегодня. Этой акцией может воспользоваться каждый новый игрок при регистрации на сайте букмекера. Это отличный старт. В форме регистрации есть необязательное поле для ввода кода. Как получить 1bet bonus code на фрибет. В магазине xBonus можно обменять баллы на коды 1xbet kz: для ординаров, экспрессов или лотерей. Найти промокоды 1xbet можно в соцсетях. Представители БК часто публикуют их к праздникам или турнирам. Все актуальные промокоды 2026 доступны в официальном разделе сайта и могут быть обменяны на бонусные баллы.

  13. Joshuabeivy Avatar
    Joshuabeivy

    Hello m?i ngu?i, ai dang tim nha cai uy tin d? cay cu?c Tai X?u thi vao ngay trang nay nhe. N?p rut 1-1: Game bai d?i thu?ng. Chuc cac bac r?c r?.

  14. Anthonykeype Avatar
    Anthonykeype

    Chào cả nhà, nếu anh em đang kiếm nhà cái uy tín để giải trí Tài Xỉu thì vào ngay địa chỉ này. Uy tín luôn: Đăng nhập BJ88. Chúc anh em may mắn.

  15. Louisboype Avatar
    Louisboype

    Hello mọi người, bác nào muốn tìm nhà cái uy tín để chơi Tài Xỉu thì tham khảo chỗ này. Tốc độ bàn thờ: https://pacebhadrak.org.in/#. Chúc các bác rực rỡ.

  16. Anthonykeype Avatar
    Anthonykeype

    Chào cả nhà, ai đang tìm cổng game không bị chặn để gỡ gạc Nổ Hũ đừng bỏ qua con hàng này. Không lo lừa đảo: sun win. Húp lộc đầy nhà.

  17. Joshuabeivy Avatar
    Joshuabeivy

    Xin chao 500 anh em, bac nao mu?n tim c?ng game khong b? ch?n d? gi?i tri Game bai thi xem th? con hang nay. Khong lo l?a d?o: sun win. Chi?n th?ng nhe.

Leave a Reply

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