Page 1 sur 1

Pourquoi eviter les caractères spéciaux ?

Posté : 16 févr. 2007, 14:11
par Invité
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 !

Posté : 16 févr. 2007, 14:13
par epso
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 :)

Posté : 16 févr. 2007, 15:24
par Ryle
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....

Posté : 16 févr. 2007, 16:01
par Brice83
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..... !

Posté : 16 févr. 2007, 16:40
par Ryle
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....

Posté : 17 févr. 2007, 16:51
par Invité
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

Posté : 24 avr. 2007, 20:17
par Invité
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.