Extension Filter

ViPHP
ViPHP | 5924 Messages

08 janv. 2008, 03:39

Bonjour,

Je suis en train de m'occuper du développement d'un site en php5, et se pose devant moi la gestion d'une part des entrées du script (POST, GET, COOKIE, …), et d'autre part de la gestion d'autres enjeux de sécurité comme la validité des adresses email, le filtrage des données textuelles destinées à l'affichage.

Pour le premier problème, c'est tout naturellement que j'ai choisi filter, intégré de base, et qui semble optimisé pour les input (si je ne me trompe, il ignore aussi sans problèmes la directive magic_quotes_gpc).

Pour la seconde tache, je ne sais pas si filter est adpaté et j'aurais aimé des retours d'expérience, des avis. En l'occurence, est ce que filter est adpaté aux taches suscitées (vérification d'adresse mail, encodage d'entités html, encodage d'url, …), est ce que les filtres sont pertinents et bien conçus ? Est ce qu'il faut préférer filter ou bien des solutions plus classiques (pcre, htmlentities et consors).

Je vous remercie par avance de vos avis.

Mammouth du PHP | 1885 Messages

08 janv. 2008, 05:39

J'ai pu utiliser brièvement filter sans toutefois comprendre exactement son utilisation.

Il semble y avoir 2 parties: VALIDATE et SANITIZE
Il y a également 2 fonctions importantes: filter_input et filter_var

VALIDATE: Vérifie la valeur selon un filtre.
SANITIZE: Modifie la valeur selon un filtre.

Cependant je n'ai jamais vu d'exemples concrets de son utilisation, je me pose donc des questions.

Est-ce qu'il faut récupérer les valeurs d'un formulaire avec un VALIDATE et ensuite afficher un message d'erreur s'il y a? Et ensuite afficher la valeur de nouveau dans le formulaire avec SANITIZE? Puisque ce dernier semble plutôt destructeur, il ne préserve pas l'entrée originale de l'utilisateur pour correction. Est-ce la façon de procéder?

Si on réaffiche les données d'un formulaire en cas d'erreur, est-ce qu'on devrait utiliser la valeur en sortie de la moulinette SANITIZE ou la valeur originale?

De plus, si le filtre VALIDATE échoue, NULL sera retournée:
Valeur de la variable demandée en cas de succès, FALSE si le filtre échoue, ou NULL si la variable variable_name n'est pas définie.
Donc on doit nécessairement récupérer la valeur de nouveau via $_GET/$_POST ou via filter_input (sans filtre) si on désire récupérer la valeur pour l'afficher à l'utilisateur pour correction.

De plus, si VALIDATE a retourné un succès, pourquoi utiliser SANITIZE? Est-ce pour des cas d'entrées de données où la valeur doit nécessairement être utilisée sans possibilité de correction par un humain? Ou devrait-on utiliser VALIDATE et ensuite SANITIZE avant une insertion en DB?

Je suis dans le flou. :)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

ViPHP
ViPHP | 5924 Messages

11 janv. 2008, 03:47

UP, d'autres avis ou remarques ?

ViPHP
AB
ViPHP | 5818 Messages

12 janv. 2008, 06:20

Bah il a pas beaucoup de succès ton topic :?

Je le suivais de loin en me disant que j'allais peut-être apprendre des choses ...

Finalement ça va pas me faire une grosse prise de tête pour tout comprendre :lol:

N'ayant pas eu plus de retour d'expérience que toi je me contente d'utiliser FILTER uniquement pour les mail, et précisemment parce que ce n'est pas une donnée sensible :lol:

Pour le reste je continue à faire mon bucheron besogneux en fonction du contenu attendu des variables.

Et dans ton école d'ingénieur ou sur d'autres forums, t'a posé la question et c'est le même silence radio ?

J'ai trainé pas mal de temps (mais il y a plusieurs années) sur des forums traitant de la sécurité des données mais je n'ai jamais vu d'exemple avec FILTER. D'où ma parcimonie à l'utiliser.

Mais peut-être une nouvelle fonction miracle ? Faut voir.

Faut peut-être lancer un sondage : Utilisez-vous filter :?:

Mammouth du PHP | 1885 Messages

12 janv. 2008, 20:18

Utilisez-vous filter :?:
Non
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

ViPHP
ViPHP | 5924 Messages

12 janv. 2008, 20:48

Et dans ton école d'ingénieur ou sur d'autres forums, t'a posé la question et c'est le même silence radio ?
Le problème, c'est que dans mon école d'ingénieur ca ne doit pas servir grand chose, la grosse majorité des gens en département informatique ne savent pas faire du dev web…
Et concernant les forums, le seul forum qui pourraît arriver (dépasser ?) au niveau de phpfrance concernant le php, ce serait developpez.com, donc s'il n'y a pas la réponse ici, c'est grave (mais j'irais faire un tour là bas, ca fait longtemps que je n'y suis pas allé…).
Faut peut-être lancer un sondage : Utilisez-vous filter :?:
Je pense que s'il y avait un seul oui, il se serait déjà manifesté. En l'occurrence ça ne m'étonnerait pas que les pros utilisent les outils de filtrage des frameworks qu'ils utilisent, je pense recodés à chaque fois, sans filter. Quant aux débutants, ils utilisent plutôt intval(), addslashes(), voire rien, et ne connaissent pas filter…

ViPHP
ViPHP | 4674 Messages

13 janv. 2008, 03:19

Utilisez-vous filter :?:
Non.

J'utilise mes propres classes de filtrage basées sur des standards et normes. Je suis sûr du résultat. Et pour les validations d'URI, Mail etc., même topo. Du coup, je ne me suis jamais penché sur la question de comment fonctionne filter. Mais apparemment, il rencontre un franc succès :P.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 684 Messages

14 janv. 2008, 12:19

Utilisez-vous filter :?:
OUI.

j'ai utilisé l'extension Filter depuis plus de 2 ans. En gros, j'ai commencé avec cette extension quand elle était encore au stade de développement dans le CVS de PECL.

Pourquoi l'avoir utilisé ? L'extension permet de faire les validations sur les types de données que l'on recoit lors des formulaires par exemple, mais aussi les paramètres que l'on recoit.

Plutôt pratique quand on veut par exemple faire le test d'une entrée ou d'un paramètre qui pourrait être un entier (int). Vous utilisez dans ce cas la solution "validate" de filter qui vous retourne un entier.
Avantage supplémentaire, c'est que l'on peut faire des intervales de valeur. Fini les 'si' plus petit et 'si' plus grand que.
Pour la gestion des erreurs : il y en a plusieurs.
1er cas : la variable ne correspond pas à un entier (ex : chaine de caractère 'ABC'). Dans ce cas, filter retourne False (si je me rappel bien des valeurs de retour). Il est facile de faire 'si valeur retour == false alors je prevois ma sortie d'erreur'.
2eme cas : la variable n'existe pas. $_POST ou $_GET ou autre n'est pas initialisée. Filter retourne NULL. Dans ce cas, on peut ce poser la question, l'utilisateur n'a pas rempli le formulaire ou il y a une erreur plus grave.

Filter permet aussi de nettoyer les chaines de caractères pour les utiliser en sortie coté navigateur mais aussi pour les insertions en base de données (dans ce cas, faut voir si l'utilisation de PDO n'est pas mieux).

Normalement avec le SANITIZING, on n'a plus de souci sur la sortie des caractères avec les encodages.

Pour ceux qui voudrait valider les entrées / sorties, il existe les même filtres dans le Zend Framework. Avantage, c'est peut être mieux documenté (?), inconvénient c'est compatible PHP 5.x donc ils ont développé leur propre fonction en PHP et n'utilisent pas l'extension Filter faite en C.

En conclusion, Filter est une bonne extension pour valider et mettre en forme les données mais si un framework fournit déjà des procédures de validation, il est certainement plus préférable de les utiliser.
Zigz4g