une vérification dans la bdd case-sensitive

VaN
Mammouth du PHP | 1107 Messages

19 févr. 2007, 19:17

Bonjour,

Mon script d'ouverture de session me pose problème.
Il semblerait que celui-ci ne soit pas case-sensitive lorsqu'il vérifie que tel login correspond bien à tel mot de passe, dans la base de données.

Exemple :

login : Bonjour
pass : salut

Ma session va s'ouvrir, si je tape Bonjour/salut, mais également si je tape bonjour/salut.

la requete est la suivante :
$sql = 	"SELECT *
					FROM USERS
					WHERE user_login = '".$_POST['login']."'";
Comment puis-je résoudre ça ?

Invité
Invité n'ayant pas de compte PHPfrance

19 févr. 2007, 20:47

Salut,

je reste honnete avec toi ==> ta méthode actuelle est très bien !

Que ce soit un b ou B , ca change quoi pour toi ?

Perso,quand je vais sur un site et qu'il refuse ma connexion a cause d'une lettre majuscule ou minuscule et que je suis obligé de tout retapé (mot de passe et pseudo)... ca me gonfle.. et je pense ne pas être le seul !

Et puis "case-sensitive", j'opte plutot pour "sensible a la casse" ou insensible à la casse" :wink:

VaN
Mammouth du PHP | 1107 Messages

19 févr. 2007, 20:55

Ce n'est pas vraiment acceptable pour moi. Je m'explique :

je prends le cas extrême, où par malheur, il existerai les deux comptes suivant dans ma base de donnée :

login : Bonjour
pass : salut

et

login : bonjour
pass : salut

(c'est extrême, mais ce n'est pas à négliger)

Dans le meilleur des cas, "Bonjour" va se faire logger en tant que "Bonjour", tant mieux pour lui. Dans le pire des cas, "Bonjour" va se faire logger en tant que "bonjour", et là, c'est le drâme. (il s'agit d'un site à caractère commercial, vente en ligne, carte bancaire, etc).

Invité
Invité n'ayant pas de compte PHPfrance

19 févr. 2007, 21:06

certe, ce n'est pas a négliger mais plusieurs compte avec le meme pseudo et passe a une majuscule près serait vraiment un coup du hasard !

Sinon, regarde un peu ici ==> http://www.phpfrance.com/tutoriaux/inde ... bles-mysql rubrique " les chaines de caractères " !

peut être que ca t'interressera...

VaN
Mammouth du PHP | 1107 Messages

19 févr. 2007, 22:12

certe, ce n'est pas a négliger mais plusieurs compte avec le meme pseudo et passe a une majuscule près serait vraiment un coup du hasard !
C'est vrai, il y'a une infime chance que cela se produise. Mais quand cela concerne un site professionnel à caractère économique, on ne peut pas laisser ce hasard arriver : )
merci pour le lien, je vais aller y jeter un oeil.

ViPHP
ViPHP | 1961 Messages

19 févr. 2007, 22:36

Bonjour,

MySQL, comme la majorité de SGBD(R) sont par défaut insensibles à la casse.

Si tu veux qu'il en tienne compte tu dois le spécifier à la création (ou bien avec un alter).
Il y a une convention pour les noms de collation : elles commencent par le nom du jeu de
caractères auquel elles sont associées; elles incluent généralement un nom de langue, et finissent
par _ci (case insensitive, insensible à la casse), _cs (case sensitive, sensible à
la casse), _bin (binaire), ou _uca (Algorithme Unicode, Unicode Collation Algorithm
[http://www.unicode.org/reports/tr10/]).
Une autre solution c'est d'utiliser BINARY dans ta requête, un exemple
mysql> SELECT * FROM articles WHERE codeArticle ='bal45';
+-------------+-------------+---------------------------+------+-------+
| codeArticle | idCategorie | nom                       | prix | stock |
+-------------+-------------+---------------------------+------+-------+
| BAL45       |           2 | Balle de squash débutant  | 5.00 |    35 | 
+-------------+-------------+---------------------------+------+-------+
1 row in set (0.02 sec)

mysql> SELECT * FROM articles WHERE BINARY codeArticle ='bal45';
Empty set (0.00 sec)
mysql> SELECT * FROM articles WHERE BINARY  codeArticle = 'BAL45';
+-------------+-------------+---------------------------+------+-------+
| codeArticle | idCategorie | nom                       | prix | stock |
+-------------+-------------+---------------------------+------+-------+
| BAL45       |           2 | Balle de squash débutant  | 5.00 |    35 | 
+-------------+-------------+---------------------------+------+-------+
1 row in set (0.00 sec)
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 99 Messages

19 févr. 2007, 22:47

Au lieu d'essayer de le rendre sensible à la casse, j'empêcherai plutôt les utilisateurs de s'inscrire si ils ont un pseudo semblable à un autre (et que seule la casse diffère). En plus, ça permet d'éviter les (c'est quoi le nom formé à partir de "confondre"?).

ViPHP
ViPHP | 1961 Messages

19 févr. 2007, 22:52

@Arcanis

Je crois que l'utilisation de la sensibilité à la casse dans les mots de passe et un grand, très grand plus pour la sécurité.

Le fait de pousser jusqu'au psuedo, j'approuve à 1.000% :pouce: :pouce: :pouce:
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 99 Messages

19 févr. 2007, 23:49

Mouais...
Si un utilisateur se nomme "Pseudo" et un autre "pseudo", ça fiche un peu le bazar dans la liste des utilisateurs (pas au niveau technique, mais au niveau...comment dire...humain?). Après, pour la sécuritée, ça marche, d'accord. Et encore. Normalement, ce sont les pseudos qui sont visibles sur un site. Donc si on voit les pseudos, je ne vois pas l'interet de les rendre sensible à la casse. On saura toujours quelle est la bonne casse.
M'enfin bon...

ViPHP
ViPHP | 1961 Messages

19 févr. 2007, 23:53

Si on lit le même post, il parle d'un site e-commerce et pas d'un forum.
C'est surement pas le même niveau de sécurité, non ?
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 99 Messages

20 févr. 2007, 00:20

mouais. Dans ce cas, pas besoin de pseudo. C'est un mot de passe supplémentaire. je suis un raleur, hein? :P

ViPHP
AB
ViPHP | 5818 Messages

20 févr. 2007, 00:47

mouais. Dans ce cas, pas besoin de pseudo. C'est un mot de passe supplémentaire. je suis un raleur, hein? :P
Oui, surtout que comme le dit Ajoloca s'il suffit d'utiliser BINARY dans la requête, le pb est vite réglé :wink:

Invité
Invité n'ayant pas de compte PHPfrance

20 févr. 2007, 14:57

VaN ==> a tu tester avant de poster ?

je t'explique :

si ton code d'espace membres est bien coder, c'est impossible que tu est 2 fois le même pseudo !

Je vient de faire l'essai sur le mien :

Le pseudo " PHPFRANCE " s'inscrit et un autre " phPfRanCe " veut aussi s'inscrire ! comme tu le constate, c'est exactement le même pseudo a quelques majuscule-minuscule près... et pourtant, mon code me dit ==> Désolé, ce pseudo est déja utilisé, veuillez en choisir un autre !

j'ai bien fait une trentaines d'essai car ton post m'avait fait un peu peur !

En clair, le pseudo " PHPFRANCE " peut très bien se connecter en mettant " PhpFrAnCe " ou phpfrance " ! Mais personne d'autres ne pourra avoir le même pseudo a une majuscule près !

Pour info, je suis un très très gros débutant en php, je ne le connait qu'a 35 % et sans vouloir me vanter, j'ai très bien codé mon espace membre après avoir bien entendu galérer pendant plus de 3 semaines... !

Donc, si toi avec un site de commerce avec carte bancaire et compagnie, on peut facilement prendre le pseudo de quelqu'un d'autres, c'est qu'il y a un gros problème de conception et surtout de protection des données !

enfin, fait le test que je vient de cité ci-dessus et dit moi ce qu'il en est :wink: