|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Bonjour
Je suis coincé sur un problème de requête SQL, et je ne sais pas si je prends la bonne direction. Je m'explique : j'ai une table avec 3 champs => Id_Util - Utilisateur - MdP. Dans le textbox d'un formulaire, j'écris le nom d'un utilisateur, une première routine vérifie l'existance de cet utilisateur (ça, ça marche) mais j'aimerais sortir la valeur du champs MdP correspondant à mon utilisateur. J'ai essayé avec SELECT FROM, mais ça ne marche pas MErci pour votre aide pécieuse Stéphane |
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
Code :
select MdP from LaTable where Utilisateur = 'blablabla' Code :
select MdP from LaTable where Id_Util = .. |
|
|
00
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Oui c'est ce que j'ai tenté de faire. Mais cela ne marche pas
Mon formulaire non lié à une table pocède 2 champs textbox : Utilisateur et MdP, un bouton OK et un autre ANNULER La table tbl_ComptesUtilisateur compte 3 champs décrits ci-dessus : Id_Util - Utilisateur - MdP. Je souhaite avoir la valeur du MdP de la ligne sélectionnée afin de la comparer au mot de passe écrit par l"utilisateur Ci dessous mon premier code qui ne fonctionne pas : Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
Dans ce cas, faites simplement une recherche sur les 2 valeurs pour voir si le couple user-pwd existe
Code :
select count(*) from LaTable where Utilisateur = 'blabla' and MdP = 'xxxx' |
|
|
00
|
|
|
#5 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Bon sang !! je n'y arrive pas !
ci-dessous mon code de test : Code :
Merci de votre réponse |
||
|
|
00
|
|
|
#6 |
![]() ![]() |
Bonjour
Un peut de recherche t'aurait donnée la réponse, car ce genre de problème revient 10 fois par jour : http://access.developpez.com/faq/ind...riteres#txtQry Suivant le type de champ il faut utiliser des simples quotes (texte), rien (numérique), dièse (date). Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon ![]() Si vous pensez commencer sans un livre, oublier : livres pour débuter Vous pouvez consulter mes articles sur Access et PowerPoint Le blog Office. Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas. |
|
|
00
|
|
|
#7 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Bonsoir Philippe
J'ai fait des recherches mais surement pas avec les bons critères. Bon, cela ne marche toujours pas, j'ai fait le code ci-dessous, mais toujours erreur : Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
Il manque encore des quotes !
Code :
verif = "SELECT COUNT(*) FROM tbl_ComptesUtilisateur WHERE utilisateur = '" & util & "'AND mdp = '" & MdP &"'" Par exemple, si vous entrez ' or 1=1-- comme nom d'utilisateur et n'importe quoi comme mot de passe, votre requête devient Code :
select count(*) from tbl_ComptesUtilisateur WHERE utilisateur = '' or 1=1-- AND mdp = 'du blabla' |
|
|
00
|
|
|
#9 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Bonsoir SLE et merci de ton aide
Premierement : étant une débutant "connaissant", peux tu m'expliquer Citation:
mon code est le suivant : Code :
|
|||
|
|
00
|
|
|
#10 | |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
L'explication, la voilà
Citation:
Si tu tapes une ' dans une des zones de saisie, la requête est modifiée, et soit elle va planter parce qu'elle n'est plus syntaxiquement correcte, soit, si tu es face à quelqu'un de malveillant qui maîtrise le SQL, elle pourra faire d'autres choses à ton insu, et ça peut aller très loin ! Dans ton code ci-dessus, tu affectes une reqûete (string) à ta variable verif, qui attend un integer, donc forcément ça peut pas fonctionner. Tu dois exécuter ta requête et affecter son résultat à ta variable. |
|
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Merci SLE de m'aider
J'étais persuadé que le résultat de était un chiffre Mais en mettant ma variable "verif" en STRING => j'ai toujous la même erreur. |
|
|
00
|
|
|
#12 |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
Oui, le résultat est bien un chiffre >= 0, mais ici, tu affectes la requête, qui elle est une chaîne. => Types incompatibles
Tu dois déclarer une variable de type string, qui va contenir la requête, puis exécuter cette requête, et ensuite récupérer son résultat dans la variable verif qui elle, est de type integer ! Dans ton code, il manque la partie la plus importante, où tu exécutes la requête ! |
|
|
00
|
|
|
#13 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
bon, j'avance!
l'erreur change de ligne Pourriez vous de dire ce que revoie la requête suivante Code :
verif = "SELECT COUNT(*) FROM tbl_ComptesUtilisateur WHERE utilisateur = '" & util & "'AND mdp = '" & MdP & "'" Quel sont les résultats de ma variable "verif" je teste avec 0 et "" : c'est pas la solution je bloque... |
|
|
00
|
|
|
#15 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Encore merci de ta réponse.
J'avance et commence à comprendre le problème entre la requête SQL et son exécution. J'ai fait le nouveau code ci-dessous, plus d'erreur mais mon comptage d'enregistrement reste à 1 même si le MdP n'est pas le bon est donc le comptage devrait être à 0. Code :
|
||
|
|
00
|
|
|
#16 |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
C'est encore normal.
Tu ne dois pas vérifier le RecordCount, qui sera toujours 1 dans ce cas (un "select count(*)" renvoit toujours un enregistrement) mais regarder ce qu'il y a comme valeur dans la première (et unique) colonne de ton premier (et unique) enregistrement. |
|
|
00
|
|
|
#17 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Ouf, ça marche
Merci SLE pour ton aide Ci-fessous pour partage le code : Code :
|
||
|
|
00
|
|
|
#18 |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
Super, mais attention que ton code est toujours vulnérable aux injections SQL et qu'il est très facile de le contourner.
Essaie de mettre ' or 1=1-- dans ton TextBox "Utilisateur" et ce que tu veux comme mot de passe, et tu verras que ça sera validé ! Essaie aussi de mettre un nom d'utilisateur qui contient une apostrophe, et là tu verras que ça plante... |
|
|
00
|
|
|
#19 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 70 ![]() |
Alaors là, je ne comprends pas du tout ce que tu veux dire dans les injonctions SQL
Dans ma base, j'ai un autre code qui vérifie que le login existe bien dans la table avant que le focus passe sur le mot de passe. Quand je tape ' or 1=1-- ça me met une erreur d'exécution '3075' Erreur de syntaxe dans la chaine dans l'expression tbl_ComptesUtilisateur.Utilisateur LIKE" or 1=1-- Ci-dessous le code qui renvoie l'erreur : Code :
|
||
|
|
00
|
|
|
#20 |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
OK. Je ne suis pas un spécialiste de MS-Access, mais il semblerait que les caractères standards SQL pour un commentaire "--" ne soient pas valides avec.
Néanmoins, les injections restent possibles via d'autres méthodes, et le fait de mettre un quote dans la zone de texte va quand-même planter l'appli. par exemple : ' or 1=1 or utilisateur = ' comme utilisateur devrait être valide car la requete deviendrait alors : Code :
SELECT * FROM tbl_ComptesUtilisateur WHERE tbl_ComptesUtilisateur.Utilisateur LIKE '' or 1=1 or utilisateur = '' Je veux simplement par là te sensibiliser aux failles de sécurité habituelles. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com