Page 1 sur 1

Sécuriser un formulaire d'enregistrement

Posté : 06 nov. 2006, 17:48
par VaN
Bonjour,

je travaille sur un site professionnel, et j'aimerai sécuriser le formulaire d'inscription. J'entends par là empêcher l'utilisateur de rentrer des caractères sensibles dans les champs de login, password et mail.

Comment dois-je m'y prendre ?

J'imagine qu'il existe déjà des fonctions développées pour ce genre de problème. En auriez-vous ?

Merci d'avance.

Posté : 06 nov. 2006, 17:56
par albat
filtrage au moyen de regexp

Posté : 06 nov. 2006, 18:46
par zigz4g
Peut etre en regardant l'extension Filter qui te filtre les chaines de caracteres.
Pour les emails, il te verifi la syntaxe sans pour autant faire la verification du nom de domaine.
Si tu prend php5.2 ou le zend framework, tu auras ces fonctions.
Sinon tu peux compiler la derniere version de filter qui se trouve sur le site de pecl.php.net -> section Tools and utilities.
La methode des regexp etant toujours une bonne methode mais qui doit couter en terme de performance. Pour la verification d'un login, mot de passe c'est toujours envisagable.

Posté : 07 nov. 2006, 16:49
par VaN
Je n'y arrive pas : /

je parcours depuis hier des sites sur les regex, mais rien n'y fait, j'ai vraiment du mal avec ça.

Comment créer une regex qui interdise les caractères douteux comme <, >, =, $ etc ?

(au passage, il y'a t'il d'autres caractères qu'il est bon d'interdire lors d'une saisie ? )

Si quelqu'un pouvait me donner une regex simple pour faire ce genre de truc, je lui en serait grandement reconnaissant : )

Merci d'avance.

Posté : 07 nov. 2006, 17:34
par Ryle
Dans les expressions régulières, pour refuser un ou plusieurs caractères il suffit dans le masque de débuter la classe par un ^ : [^-_ ] équivaut à "sauf tiret, underscore ou espace"

Mais il n'y a pas réellement de caractères "douteux", il y a juste des caractères à savoir gérer. Il n'est pas inhabituel (il devrait même être normal ;)) de retrouver des caractères spéciaux dans des mots de passe.. ca n'a rien de douteux :)

Tout dépend de l'usage.. dans un champ input il faut faire attention aux guillemets qui doivent être protégées quand tu les réafficheras... les < > n'ont pas d'inconvénient particulier, il faut juste s'assurer qu'ils ne dissimulent pas un code html nuisible (et encore, selon l'usage que tu veux en faire)
Dans un login on peut envisager que l'espace n'est pas des plus adapté..
Dans un mail les restrictions sont beaucoup plus importantes car le format est normalisé...

Posté : 07 nov. 2006, 18:10
par VaN
voici ma regex, mais elle ne semble pas marcher :
if(preg_match('[^"\'<>=$ ]', $_POST['login']))
Je souhaite interdire les caractères suivants : " ' < > = $ et l'espace.

Qu'est ce qui cloche ?

Posté : 07 nov. 2006, 19:51
par VaN
J'ai résolu mon problème.

J'en ai un autre : Voici la regex pour vérifier les mails :
'`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-.]?[[:alnum:]])*\.([a-z]{2,4})$`'
Elle a l'air plutot efficace, mais je viens de la tester avec mon email perso, et elle n'accepte pas plusieurs _ à la suite dans la partie avant le @.

Que dois-je modifier pour qu'elle accepte cela ?

Posté : 08 nov. 2006, 15:19
par zigz4g
Pour l'email :
        $regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|'
        .'\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])'
        .'|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|'
        .'([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))'
        .'\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|'
        .'(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|'
        .'([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))'
        .'\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|'
        .'((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/';

Posté : 08 nov. 2006, 15:20
par zigz4g
voici ma regex, mais elle ne semble pas marcher :
if(preg_match('[^"\'<>=$ ]', $_POST['login']))
Je souhaite interdire les caractères suivants : " ' < > = $ et l'espace.

Qu'est ce qui cloche ?
Ne faut-il pas mettre une * ou un + apres tes [] ?
if(preg_match('[^"\'<>=$ ]+', $_POST['login']))
EDIT: j'avais mal lu le ^ dans la regexp. Je dois me tromper.