Lettre en Min et Maj

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Lettre en Min et Maj

Re: Lettre en Min et Maj

par rimie » 24 févr. 2012, 05:20

donc vaut mieux utiliser WHERE champs = $champs, c'est plus precis

Re: Lettre en Min et Maj

par sirakawa » 21 févr. 2012, 11:31

Je suggèrerais :
1) Modifier la base pour avoir des logins normalisés : tout min/ tout maj/ maj initiale
2) Modifier le script de création de comptes pour qu'il crée des logins normalisés
3) Modifier le script de connexion de façon qu'il normalise le login saisi

Ajoutons que LIKE anglais se traduit par comme ou ressemblant à, et que "François" ressemble à "Français", mais que le like de mysql a un sens fort différent:
"François" like "Français" y est faux:
Il est
- insensible à la casse,
- prévu visiblement pour comparer avec des masques contenant des jokers :
-- like "admin%" tout ce qui commence par admin quel que soit le nombre de lettres qui suivent et quelles qu'elles soient, ..
-- like "admin_" tout ce qui commence par admin quelle que soit la lettre suivante facultative ..
-- like 'admin' doit rendre juste pour les saisies "admin", "Admin", "aDmin".... "âdmin", " soit toutes les combinaisons maj/min accentuées ou pas... mais faux pour une saisie "administrateur"
- sur mes tests dans une base de mots contenant "vélo"
-- select ... like "velo" trouve "vélo" comme like "vélo" ou like "Vélo"....
-- select ... like "velo%" trouve vélo, vélodrome.... toute la famille "vélo-"
-- select ... like "velo_" trouve vélo, vélos.
Il existe aussi un REGEXP comparaison utilisant une expression régulière.
cf http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

Re: Lettre en Min et Maj

par Shenryu » 21 févr. 2012, 11:08

Salut,

Juste un petit rappel concernant MySQL et la casse des caractères : http://dev.mysql.com/doc/refman/5.0/fr/ ... ivity.html

Du coup, il faut bien faire attention à utiliser les bonnes fonctions de comparaison sans quoi ça ne sert à rien ^^

++

Re: Lettre en Min et Maj

par moogli » 21 févr. 2012, 09:38

PDO n'est qu'une interface de connexion aux SGBD du SQL reste du SQL donc "tout fonctionne".
Après c'est a toi de savoir ce que tu va avoir comme info en retour et la pour le coup je ne suis pas sur que tu le sache :) (var_dump est ta meilleure amie dans ces cas ;) ).

@+

Re: Lettre en Min et Maj

par rimie » 21 févr. 2012, 07:01

SELECT COUNT(*) marche avec la PDO?

Re: Lettre en Min et Maj

par Ryle » 20 févr. 2012, 22:58

Ben sur le WHERE c'est indispensable puisque c'est la chaine que tu as en base que tu vas comparer à celle que tu récupères de ton formulaire. Il vaut donc mieux que les deux soient en minuscules :)

Pour le select, c'est le résultat de ta requête. La question est donc de savoir si tu as besoin de récupérer un pseudo en minuscule (avec lower()) ou dans la forme dans laquelle il se trouve dans ta base (sans lower()).

A noter également que si la seule chose qui t'intéresse c'est de tester l'existence du pseudo, tu peux faire un " SELECT COUNT(*) " plutôt qu'un " SELECT pseudo ", le premier te retournant juste le nombre de résultat trouvé ( 0 = pseudo disponible ; 1 ou plus = pseudo déjà utilisé ). Le count() est la fonction la plus rapide et la plus optimisée en sql :)

Re: Lettre en Min et Maj

par rimie » 20 févr. 2012, 10:07

ah merci je dois l'ajouter sur les 2 le SELECT et WHERE, merci

Re: Lettre en Min et Maj

par xTG » 20 févr. 2012, 07:44

Plutôt ainsi :
$username = strtolower(mysql_real_escape_string($_POST['username']));
$sqlq = "SELECT LOWER(pseudo) FROM membres WHERE lower(pseudo) = '$username'";

Re: Lettre en Min et Maj

par rimie » 20 févr. 2012, 04:38

comme ca:
$username = strtolower($_POST['username']);

$sqlq = 'SELECT LOWER(pseudo) FROM membres WHERE pseudo = \''.$username.'\'';

Re: Lettre en Min et Maj

par moogli » 19 févr. 2012, 17:54

dans ce cas utilise l'égalité, a la limite tu passe les deux en majuscule ou minuscule mais surtout pas de like ;)


@+

Re: Lettre en Min et Maj

par rimie » 19 févr. 2012, 14:36

c'est pour un formulaire d'enregistrement, on verifie si le pseudo est disponible ou non

Re: Lettre en Min et Maj

par xTG » 19 févr. 2012, 11:38

Non, le LIKE n'a aucun intérêt sauf pour un formulaire de recherche dans ce cas précis.
Faire un LIKE pour un formulaire de connexion (si c'est ton cas) est une énorme faille de sécurité car cela veut dire qu'on pourrait se connecter sans connaitre exactement le login.

Re: Lettre en Min et Maj

par rimie » 19 févr. 2012, 10:56

SELECT pseudo FROM membres WHERE pseudo LIKE 'admin'
est ce que cette requete est securisee?

Re: Lettre en Min et Maj

par sirakawa » 18 févr. 2012, 23:18

Ben oui, la première chose est de mieux contrôler la création:
pseudo tout transformé en minuscules, en majuscules, première lettre seulement en majuscules... comme suggéré ci-dessus. En écrivant. ta fonction sur mesure, ce qui fait que si tu changes de politique, tu auras à modifier seulement ta fonction et à mettre à jour ta BDD.
Dès lors, il suffit de transformer le login saisi avec la même fonction pour avoir la paix.
Si tu joues avec like pour vérifier les login, tu risques de ne pas reconnaître un login mal majusculé et de reconnaître un stock de balivernes.... D'ailleurs "admin c'est like quoi?

Re: Lettre en Min et Maj

par xTG » 18 févr. 2012, 14:22

LIKE c'est totalement différent de l'égalité j'espère que tu en es conscient...
Sinon pour le "quelque chose ne va pas" on n'a pas encore reçu notre commande de boule de cristal. :P