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
https://t.me/s/ud_MRbIt
AlbertTeery
3 Nov 25 at 3:01 am
online pharmacy: online pharmacy ireland – online pharmacy
Johnnyfuede
3 Nov 25 at 3:04 am
online pharmacy [url=http://irishpharmafinder.com/#]pharmacy delivery Ireland[/url] irishpharmafinder
Hermanengam
3 Nov 25 at 3:17 am
online pharmacy australia: online pharmacy australia – pharmacy discount codes AU
Johnnyfuede
3 Nov 25 at 4:25 am
http://irishpharmafinder.com/# trusted online pharmacy Ireland
Haroldovaph
3 Nov 25 at 5:08 am
affordable medication Ireland
Edmundexpon
3 Nov 25 at 5:24 am
Je suis fascine par Wild Robin Casino, ca offre un plaisir vibrant. Les options de jeu sont infinies, proposant des jeux de table sophistiques. Le bonus initial est super. Le service d’assistance est au point. Les gains sont verses sans attendre, quelquefois des recompenses supplementaires dynamiseraient le tout. En bref, Wild Robin Casino garantit un amusement continu. Pour couronner le tout le design est moderne et energique, donne envie de continuer l’aventure. Particulierement fun les paiements en crypto rapides et surs, garantit des paiements rapides.
Commencer Г explorer|
frostfoxos3zef
3 Nov 25 at 5:28 am
Je suis accro a Wild Robin Casino, on ressent une ambiance de fete. Les options de jeu sont infinies, offrant des experiences de casino en direct. Il donne un avantage immediat. Le support est fiable et reactif. Le processus est simple et transparent, de temps a autre des recompenses supplementaires seraient parfaites. Au final, Wild Robin Casino est une plateforme qui fait vibrer. Pour ajouter la navigation est fluide et facile, amplifie le plaisir de jouer. Un element fort les competitions regulieres pour plus de fun, qui dynamise l’engagement.
Lire plus|
neopoweras4zef
3 Nov 25 at 5:37 am
https://t.me/s/uD_fLAgmAn
AlbertTeery
3 Nov 25 at 5:38 am
J’ai un faible pour Cheri Casino, il cree une experience captivante. Il y a une abondance de jeux excitants, comprenant des jeux compatibles avec les cryptos. Le bonus initial est super. Les agents repondent avec efficacite. Le processus est fluide et intuitif, malgre tout plus de promotions variees ajouteraient du fun. Pour faire court, Cheri Casino offre une aventure memorable. Notons aussi la navigation est claire et rapide, booste le fun du jeu. Egalement genial les options variees pour les paris sportifs, propose des privileges personnalises.
Aller sur le site|
neovibeus4zef
3 Nov 25 at 5:50 am
Je suis enthousiasme par Cheri Casino, il propose une aventure palpitante. Il y a un eventail de titres captivants, incluant des paris sportifs pleins de vie. Il donne un avantage immediat. Disponible a toute heure via chat ou email. Les paiements sont securises et rapides, toutefois plus de promos regulieres ajouteraient du peps. En conclusion, Cheri Casino est un choix parfait pour les joueurs. D’ailleurs le design est moderne et attrayant, ajoute une touche de dynamisme. Particulierement cool les paiements securises en crypto, qui motive les joueurs.
DГ©couvrir davantage|
dreamsparkos4zef
3 Nov 25 at 5:50 am
J’ai un faible pour Instant Casino, il procure une sensation de frisson. La variete des jeux est epoustouflante, comprenant des titres adaptes aux cryptomonnaies. Il offre un coup de pouce allechant. Le support est efficace et amical. Les retraits sont fluides et rapides, quelquefois des recompenses additionnelles seraient ideales. En bref, Instant Casino est une plateforme qui pulse. Pour ajouter la navigation est fluide et facile, facilite une experience immersive. Particulierement interessant le programme VIP avec des recompenses exclusives, offre des bonus constants.
DГ©marrer maintenant|
AeroBearas2zef
3 Nov 25 at 5:51 am
Je suis enthousiasme par Frumzi Casino, ca offre un plaisir vibrant. Les options de jeu sont infinies, avec des machines a sous visuellement superbes. 100% jusqu’a 500 € + tours gratuits. Le service client est excellent. Les retraits sont simples et rapides, a l’occasion quelques free spins en plus seraient bienvenus. Pour finir, Frumzi Casino vaut une visite excitante. Ajoutons aussi la navigation est fluide et facile, ce qui rend chaque partie plus fun. Particulierement fun les tournois reguliers pour la competition, offre des recompenses regulieres.
Voir maintenant|
quantumbearus2zef
3 Nov 25 at 5:51 am
pharmacy delivery Ireland: irishpharmafinder – trusted online pharmacy Ireland
HaroldSHems
3 Nov 25 at 6:13 am
https://t.me/s/ud_1xSlOtS
AlbertTeery
3 Nov 25 at 6:46 am
https://t.me/s/ud_monro
AlbertTeery
3 Nov 25 at 6:48 am
Irish online pharmacy reviews
Edmundexpon
3 Nov 25 at 6:53 am
safe place to order meds UK [url=https://ukmedsguide.shop/#]legitimate pharmacy sites UK[/url] UK online pharmacies list
Hermanengam
3 Nov 25 at 7:17 am
https://t.me/s/ud_1Go
AlbertTeery
3 Nov 25 at 7:25 am
online pharmacy: best Irish pharmacy websites – top-rated pharmacies in Ireland
HaroldSHems
3 Nov 25 at 7:47 am
https://t.me/s/UD_DADdy
AlbertTeery
3 Nov 25 at 7:54 am
https://evobizepl.com
Richardlealt
3 Nov 25 at 8:13 am
казино России
Larryexike
3 Nov 25 at 8:54 am
best pharmacy sites with discounts: top rated online pharmacies – online pharmacy
Johnnyfuede
3 Nov 25 at 8:57 am
https://t.me/s/ud_gIZbo
AlbertTeery
3 Nov 25 at 9:06 am
UkMedsGuide [url=https://ukmedsguide.com/#]non-prescription medicines UK[/url] legitimate pharmacy sites UK
Hermanengam
3 Nov 25 at 9:17 am
J’adore l’energie de Cheri Casino, il offre une experience dynamique. Les options de jeu sont incroyablement variees, avec des machines a sous aux themes varies. Il offre un coup de pouce allechant. Le support est rapide et professionnel. Le processus est fluide et intuitif, par ailleurs des offres plus importantes seraient super. Globalement, Cheri Casino est un must pour les passionnes. Par ailleurs le site est fluide et attractif, booste le fun du jeu. Egalement excellent le programme VIP avec des privileges speciaux, assure des transactions fluides.
Cliquez ici|
aerospinis2zef
3 Nov 25 at 9:17 am
https://t.me/s/ud_FRESh
AlbertTeery
3 Nov 25 at 9:42 am
irishpharmafinder: online pharmacy ireland – Irish online pharmacy reviews
Johnnyfuede
3 Nov 25 at 10:18 am
top-rated pharmacies in Ireland
Edmundexpon
3 Nov 25 at 11:23 am
cheap medicines online UK: UK online pharmacies list – UkMedsGuide
HaroldSHems
3 Nov 25 at 11:50 am