none
Requete Sql RRS feed

  • Question

  • Bonjour à tous,

    mon problème est le suivant : lorsque je fait une requête SQL sur une base de données Acces je doit faire un WHERE sur un champ avec un string. Je sais que lorsque l'on fait un WHERE avec un string on doit ajouter les caractère ' mais le probleme c'est que certains string que je cherche comporte des ' example SELECT * From Table Where NomDuChamp = 'Boite D'Allumette' le d' vien vraiment tout faire chambouler. Si Quelqu'un sais comment faire faite moi signe.

    Merci de vos reponses à tous Smile

    jeudi 6 décembre 2007 19:45

Réponses

  • Bonjour,

     

    L'idéal serait d'utiliser les requêtes paramètrées en lieu et place d'une construction de chaîne de caractères qui ouvre des failles de sécurité. Ce n'est pas le seul facteur permettant de faire du SQL Injection ou du SQL Truncating mais c'est en tout la porte d'entrée à ceci.

     

    L'avantage des requêtes paramétrées est le suivant:

    Si tu fais "where nom = '" + tbNom.Text + "'", il est aisé de mettre "'; drop table nomtable; --" dans la textbox et cela donnera comme requête:
    "where nom = ''; drop table nomtable; --'".

    Par contre si tu utilises les paramètres, cela donnera
    where nom = '''; drop table nomtable; --''', ce qui n'est pas pareil et n'a surtout pas les mêmes résultats

     

    Didier

    samedi 8 décembre 2007 16:51

Toutes les réponses

  • Bonjour,

    Dans votre chaîne il faut remplacer les ' par 2 '. Dans votre exemple cela donnera :

     

    SELECT * FROM table WHERE nomduchamp = 'Boite D''Allumette'

     

    Pour remplacer les ', utilisez la fonction Replace de la classe String :

     

    maString.Replace("'", "''")

     

    Guillaume

    vendredi 7 décembre 2007 06:01
  • Bonjour,

     

    L'idéal serait d'utiliser les requêtes paramètrées en lieu et place d'une construction de chaîne de caractères qui ouvre des failles de sécurité. Ce n'est pas le seul facteur permettant de faire du SQL Injection ou du SQL Truncating mais c'est en tout la porte d'entrée à ceci.

     

    L'avantage des requêtes paramétrées est le suivant:

    Si tu fais "where nom = '" + tbNom.Text + "'", il est aisé de mettre "'; drop table nomtable; --" dans la textbox et cela donnera comme requête:
    "where nom = ''; drop table nomtable; --'".

    Par contre si tu utilises les paramètres, cela donnera
    where nom = '''; drop table nomtable; --''', ce qui n'est pas pareil et n'a surtout pas les mêmes résultats

     

    Didier

    samedi 8 décembre 2007 16:51