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![]()
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%'
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...
Envoyé par bigsister
Tu ne vois pas comme un léger souci ?Envoyé par bigsister
![]()
??? 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 ?
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()...
Partager