Est-il normal que mysql accepte :
Je croyais que % était un caractère joker uniquement pour LIKE et un autre truc mais pas pour = ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from matable where mavar = '1%'
Est-il normal que mysql accepte :
Je croyais que % était un caractère joker uniquement pour LIKE et un autre truc mais pas pour = ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from matable where mavar = '1%'
Pour te protéger des injections sql voici la fonction à utiliser avec mysql:
mysql_real_escape_string
ouais je sais lol je l'ai découvert il y un mois environMais justement cette fonction n'enlève pas, entre autres, ce caractère : %.
Donc à moins de refaire un contrôle en plus pas moyen de retirer ce %... ce qui à la limite n'était pas génant à priori quand on utilisait pas de LIKE mais un =.
Apparement, suite à quelques tests perso il semblerait que le % dans après un = soit ignoré par mysql (ou purement sql d'ailleurs ?)...
Est-ce que quelqu'un pourrait me le confirmer et/ou m'expliquer le pourquoi du comment ?
En dehors du LIKE % est tout simplement considéré comme le caractère pourcent classique![]()
Pensez au bouton
pourtant quand je fais :
il me renvoit bien l'enregistrement corespondant à mavar = 1 alors qu'en théorie il ne devrait rien trouver...
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from matable where mavar = '1%'
Pas chez moi sous MySQL 5.0![]()
Pensez au bouton
Moi j'ai MySQL 4.0.15 et 4.0.21
Ce serait donc un problème inhérant à la version de mysql... soit.
D'ailleurs ce genre de requête provoque un bug avec PHPmyadmin :
Ca n'affiche qu'un résultat à l'écran pour ma requête pourtant ça propose de voir plusieurs pages de résultat...
J'ai remarqué que la requête suivante passe aussi !
Quand mysql 4.0.15 ou 4.0.21 rencontrerait un % dans un = il ignorerait tout ce qu'il y a derrière y compris le % ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from matable where mavar= '1%kjhhsqkjqhsdfh'
bizarre bizarre...
bon en fait plus généralement je m'aperçois qu'on peut mettre n'importe quoi après un = pour une recherche sur un entier en tout cas.
Par exemple :
est traduit automatiquement par mysql en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from matable where mavar='1sdf56s4df5s4'
Pourquoi mysql est-il donc si permissif ? Est-ce que vous voyez des failles d'injection qui pourraient intervenir ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from matable where mavar='1'
On peut conclure que cette permissivité n'est pas dangereuse en soit à condition de contrôler comme d'habitude les contenus des variables GET, POST etc...
Attends mais quel est le type de mavar ?
Pensez au bouton
un integer why ?
Envoyé par bigsister
Tu ne vois pas comme un léger souci ?Envoyé par bigsister
![]()
Pensez au bouton
??? Je récupère mavar dans un GET ou un POST ça peut très bien être n'importe quoi
Ce n'est pas au SGBD de faire du contrôle de saisie, lui il a une colonne de type INT donc il s'attend à une comparaison avec un entier.
Comment la valeur de la colonne mavar peut être égale à '1sdf56s4df5s4' si c'est un INT ?
Pensez au bouton
je suis d'accord mais en fait j'espèrais simplement que mysql ne me renverrait pas d'enregistrement ou au pire une erreur SQL ...
ben il suffit de traiter tes données.
is_numeric()...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager