Champs avec ' apostrophe dans une requête Query

yacinew Messages postés 18 Date d'inscription vendredi 21 août 2009 Statut Membre Dernière intervention 22 février 2018 - 4 mai 2015 à 14:59
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 4 mai 2015 à 18:08
Bonjour ,

J'ai le code suivant :

with Query do
begin
Close;
SQL.Clear;
SQL.Add('select DISTINCT REF,text from tab F' );
SQL.Add('inner JOIN tab1 A ON A.REF = F.REF' );
SQL.Add('where A.LIBELLE_AF='''+ComboBox.text+''' ');
Prepare;
open;
end;


tous marche bien sauf si j'ai un texte qui contient des ' dans ComboBox.text

Alors comment faire pour éviter l'erreur

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
4 mai 2015 à 15:15
Bonjour,

Ce que tu fais est plus grave que juste un problème d'apostrophe.
C'est une faille de sécurité, l'injection SQL.

Imagines par exemple que Combobox.text contienne une valeur du genre
'; drop table tab; -- 

Cela va créer deux requêtes :
select DISTINCT REF,text from  tab F inner JOIN tab1 A ON A.REF = F.REF where A.LIBELLE_AF='';
drop table tab; --' 

La deuxième requête étant bien sûr dramatique pour ta base...

Regarde donc sur Google comment te prémunir de ce genre d'attaques :
https://www.google.fr/search?q=injection+sql+pascal

Ton problème de guillemets se résoudra de la même manière.
0
yacinew Messages postés 18 Date d'inscription vendredi 21 août 2009 Statut Membre Dernière intervention 22 février 2018
4 mai 2015 à 15:23
Merci,
le text du Combobox c'est un résultat d'une autre requête .
j'ai pas trouver la solution pour l'apostrophe sur le lien .
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
4 mai 2015 à 18:08
Salut

Utilise une requête paramétrée :

with Query do begin
     Close;
     With SQL do begin
        Clear;
        Add('select DISTINCT REF,text from  tab F' );
        Add('inner JOIN tab1 A ON A.REF = F.REF' );
        Add('where A.LIBELLE_AF= :P_LIBELLE');
     end;    
     ParamByName('P_LIBELLE').Value := ComboBox.Text;
     Open;
end;


(Et accessoirement tu peux gérer les exceptions sur ton Open)
0
Rejoignez-nous