Pourquoi eviter les caractères spéciaux ?

Invité
Invité n'ayant pas de compte PHPfrance

16 févr. 2007, 14:11

Bonjour,

je vois souvent dans divers scripts php (espace membres) la fonction qui interdit l'utilisation de caractères spéciaux lors de l'inscription (pseudo, mot de passe.....) !

Mais pourquoi, a quoi sa sert exactement ? sécurité ?

merci !

Eléphanteau du PHP | 40 Messages

16 févr. 2007, 14:13

Oui, c'est une question de sécurité, laisser les caractères spéciaux permet de faire des injections SQL, qui te permet de craquer les login et rentrer sans en avoir, aprés, je connais pas les détails :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 févr. 2007, 15:24

Tout dépend de où et tout dépends de quels caractères... typiquement, dans une url, seuls les caractères spéciaux "-" et "_" devraient être utilisés dans les noms de fichiers, les espace et accents sont déconseillés car selon le navigateur, serveur et le système, il peut ne pas retrouver systématiquement les fichiers correspondant.

Dans un login, je comprend que l'on puisse éventuellement interdire les espaces pour éviter d'avoir une chaine de ceux-ci. En revanche interdire les caractères spéciaux dans un mot de passe me parait ridicule. C'est se priver d'une garantie supplémentaire de sécurité. (On préconise en général de choisir un mot de passe comportant - 3 parmis ces 4 - une minuscule, une majuscule, un nombre et un caractère spécial)

Quant à l'injection sql, cela provient selon moi d'un mauvais contrôle des données transmises par l'utilisateur (ne jamais faire confiance aux utilisateurs et toujours contrôler les données que l'on ne maitrise pas) plutôt qu'un problème d'autoriser ou non les caractères spéciaux....
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 96 Messages

16 févr. 2007, 16:01

Je suis d'accord avec Ryle !

Interdire les caractère spéciaux dans les pseudo peut aussi être une question de lisibilité !

Exemple,vous avez un classement et des petit plaisantins s'éclate en mettant un pseudo style :

-('è_çàéù;,:!^$*=)

je préfère encore voir ' jhkdjshguiqy '

Puis, en ce qui concerne le mot de passe, pour faire une injection SQL, il faut un minimum de caractère, hors, il suffit de limité le nombre de caractère pour le mot de passe, exemple : 15 caractère max !

un problème reste quand même présent : le mail du membre ! En effet,on ne peut pas trop limiter le nombre de caractère car y'en a qui ont des adresses aussi longue qu'une page de ce forum..... !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 févr. 2007, 16:40

bah même sans limiter le nombre de caractères... Pour faire de l'injection, il faut que l'utilisateur puisse écrire dans la requête pour la modifier.

Si on ne le laisse renseigner qu'une valeur à la fois et qu'on l'empêche de fermer la chaine qui l'entoure (suffit de protéger les apostrophes pour qu'elles soient interprétées comme caractère et non comme une fin de chaine - chose qui se fait automatiquement avec magic quotes ou manuellement avec un addslashes()), je ne vois pas où est le risque....
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

17 févr. 2007, 16:51

Pour moi, quand j'entends "sql injection", je pense à "mysql_real_escape_string".

Ca te protège les caractères spéciaux alors le mechant peut très bien s'appeller 'DELETE FROM user' sans problème

Invité
Invité n'ayant pas de compte PHPfrance

24 avr. 2007, 20:17

laisser les caractères speciaux permet d'utiliser un login du style:

moi');delete c:;

( bon j'exagère bien la)

le programme (ecrit par un newbe)
pourrait lire:

login('moi');delete c:; ');

normalement les fonctions usuelles du php (addslasces,...) permettent d'eviter cela et il vaut toujours mieux utiliser des caractères spéciaux pour son mot de passe.