ASP:pb requete sql

Bonjour,

J ai un probleme de récupération de données provenant d un cookie.
La syntaxe pour récupérer le cookie est correcte(j ai bien vérifiée, ce cookie me retourne la bonne variable).
Je pense que ma requete sql est incorrecte. Je voudrais donc insérer dans celle-ci une donnée.
J ai crée une connexion avec dsn à une base access ayant comme nom "Infos".
Ma table "ALARM" parmis les differents champs, celui sur lequel la recherche est effectuée est "mdp". Et je voudrais comptabiliser le nombre d element de la table pour une variable donnée grace au cookie.

Voici le code :
<% Set conn = Server.CreateObject("ADODB.Connection")
conn.open "Infos"
dim rsCount
Set rsCount=conn.Execute("SELECT COUNT(*) FROM ALARM WHERE mdp = " & request.cookies("pwd") )
Response.Write "il y a " & rsCount(0) & "."%>

Merci d avance !!!

5 réponses

  1. Modérateur
    (je ne vais pas répondre à ta question, mais:)
    Je peux hurler ?

    YYYYYYYOOOOAAAAAAAAA!!!!!!
    Faille de sécurité !

    Tu balance le contenu du cookie dans la requête SQL sans filtrer ? Danger !

    Imagine que je mette ça dans le cookie: ''; DELETE ALARM
    Ta page ASP va exécuter la requête suivante:
    SELECT COUNT(*) FROM ALARM WHERE mdp = ''; DELETE ALARM
    Et hop... pour peut que le user SQL ait les droits d'écriture, je te vide ta table.

    Je te conseille:
    1) de quoter proprement ton cookie dans la chaîne SQL:
    Remplace "SELECT COUNT(*) FROM ALARM WHERE mdp = " & request.cookies("pwd")
    Par "SELECT COUNT(*) FROM ALARM WHERE mdp = '" & request.cookies("pwd") &"'"

    2) de doubler toute simple-quote trouvée dans le cookie ( ' --> '').
    (je ne sais plus la syntaxe en ASP: replace ? sub ?):
    Remplacer request.cookies("pwd")
    Par request.cookies("pwd").sub("'","''")
    1
    1. Je te remercie beaucoup du conseil car je n avais pas pense au probleme de destruction de table.
      Mais, la requete ne fonctionne toujours pas lorsque je remplace par ta solution, il y a l erreur "Erreur d'exécution Microsoft VBScript erreur '800a000d'
      Type incompatible" qui apparait.
      0
    2. Ca y est ca fonctionne !
      Merci beaucoup !!!
      0
  2. Contributeur
    Salut,
    A priori tu cherches a compter les mots de passe identique...
    En "pur" SQL il te faut mettre un nom de champ a la place de ton etoile et finir ta requete par un Group By mdp si ma memoire est bonne...

    .  .
    \_/
    0
    1. Tout juste.
      Pour connaitre la syntaxe exacte, tu peux faire une petite requête sous Access.

      Attention aussi que ton cookie contient certainement du texte, dès lors, du devrais l'encadrer de quotes

      Salutations,

      Krizniak
      0
      1. Modérateur
        Encore un conseil de sécurité (A l'image de ce qui s'est passé ce week-end avec l'attaque massive de serveurs SQL):

        Il ne faut jamais avoir un serveur SQL accessible de l'extérieur.
        Seul ton serveur Web doit avoir accès au serveur SQL.
        0
        1. Merci de tes conseils de grand sage !
          ;-)
          0