Page 1 sur 1

Filtrer les caractères non imprimables des champs textes

Posté : 17 nov. 2008, 13:34
par savageman
Bonjour,

J'ai une jolie classe Form (style Hoa ou Zend), et je pensais filtrer systématiquement tous les caractères non imprimables des champs textes (non password) et textarea.

Pensez-vous que ça soit une bonne idée ? Sachant que si le caractère est non imprimable, il ne s'affichera de toute façons pas... C'est dans un souci de sécurité, bien entendu.

Merci d'avance pour vos avis.

@+
Savageman.

Posté : 17 nov. 2008, 13:37
par Calimero
Ca peut te réserver des surprises si tu n'as pas une gestion parfaite des charsets...

Posté : 17 nov. 2008, 15:06
par savageman
Mes charsets sont bien gérés à priori. C'est plus pour éviter par exemple que quelqu'un ai le même pseudo "affiché" s'il mets des caractères invisibles dedans.
De plus, il n'y a aucun intérêt de mettre des caractères non affichables dans ce type de champ...

Posté : 17 nov. 2008, 19:04
par Hywan
Hey :),

Et quels sont les caractères non imprimables ? La plage de caractères est immense … Exemple : il suffit que tu n'aies pas installé les polices asiatiques pour Unicode, et tu ne verras pas les caractères (parfois). De plus, tu comprends vite que c'est très dépendant des configurations de la machine de l'utilisateur.

Posté : 17 nov. 2008, 21:32
par savageman
Pour l'instant, j'ai ça : return preg_replace('`[^ \x20-\x7f\w]`i', '', $value);

En gros, je vire tout, sauf les caractères "espace", entre code ascii 32 et 127 et \w sert pour les accents suivant la configuration locale... Après c'est pas vraiment fait pour les caractères chinois non plus, c'est vrai. :s

Posté : 18 nov. 2008, 02:38
par Hywan
Je suis peut-être naïf, mais en quoi ça ouvre des failles de sécurité ?

Posté : 18 nov. 2008, 08:47
par savageman
Des failles, des failles... C'est un grand mot. J'ai dit plus haut que c'était pour éviter les petits malins. Par exemple, je peux facilement m'inscrire avec le même pseudo que toi. Si je change l'avatar pour prendre aussi le même, des gens pourront penser que c'est toi qui poste (alors qu'en fait non). Bon sur PHPFrance c'est pas forcément vrai pour toi car t'as un espèce de gros logo VIPHP en-dessous, mais la plupart du temps c'est bon.
C'est pour éviter des petits malins quoi. ;)

Posté : 18 nov. 2008, 18:31
par Sékiltoyai
Ce que tu décris, c'est une forme d'engeneering social, et c'est une attaque très efficace contre des gens non avertis…

Posté : 18 nov. 2008, 18:45
par savageman
Sauf que personne n'est protégé... Ou presque personne...
Le truc, c'est que mon filtrage est très restrictif : les accents déjà, c'est mort. :/

Posté : 18 nov. 2008, 19:36
par Hywan
J'y ai encore réfléchis aujourd'hui et je ne trouve pas de solutions car c'est très dépendant des configurations de chaque terminal. Si quelqu'un a une idée …

Sékil' a mis un nom sur le problème, peut-être qu'une petite recherche … ?

Posté : 18 nov. 2008, 21:29
par Sékiltoyai
Sékil' a mis un nom sur le problème, peut-être qu'une petite recherche … ?
Non, j'y crois pas. L'engeneering social c'est ultra vaste comme concept… Le fait de prendre l'identité d'une personne est un de ses aspects.

Posté : 20 nov. 2008, 07:48
par savageman
Une première solution serait de filtrer les caractères < 32 (sauf les retours à la ligne dans un textarea).
Après, pour les caractères invisibles, c'est vrai que c'est un peu trop variant...

Posté : 20 nov. 2008, 13:39
par Hywan
Sinon, une solution consiste à avoir un filtre variant en fonction de la localisation de l'utilisateur.

Posté : 20 nov. 2008, 19:24
par savageman
Pas facile facile... :/