IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Echappement de caractère impossible ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut Echappement de caractère impossible ?
    Bonjour,
    j'ai un programme qui me génère en auto un requete sql de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM R2 where madate = '01/01/2018'
    dans mon programme l'unique possibilité que j'ai est de modifier la valeur de la date pour metter par exemple 10/10/2018
    la requete générée est donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM R2 where madate = '10/10/2018'
    Ce que je veux c'est avoir la date du jour, j'ai donc saisi comme valeur getdate().
    Le problème c'est que la requête générée devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM R2 where madate = 'getdate()'
    cela ne fonctionne pas a cause de ces foutus apostrophes

    Comment je peux m'en sortir pour générée une requete qui fonctionne sachant que je ne peux jouer que sur la valeur du champs date , j'ai essayé de mettre 'getdate()' , la requete devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM R2 where madate = ''getdate()''
    mais cela ne fonctionne pas non plus...

    Une idée ?

  2. #2
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut
    parfois il suffit d'expliquer notre problmem pour trouver sa solution, je viens de réussir en renseignant dans mon champs texte : ' + getdate() + '
    ma requete devient alors SELECT * FROM R2 where madate = '' + getdate() + '' , et c'est correct!!


  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    bravo, vous avez hacké votre propre SI, par une belle injection SQL

    Ce programme est dangereux, et j’espère que son accès est très limité...

    Je vous laisse imaginer (imaginer seulement, pas exécuter !) ce que cela pourrait donner si à la place de ' + getdate() + ' quelqu'un saisissait '; DROP TABLE R2;--... ou pire !

  4. #4
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut
    Cela ne va pas répondre à la question mais comme a écrit aieeeuuuuu, cette façon de procéder est strictement à proscrire du fait des risques qu'elle entraîne.
    A minima, il faut que le programme ait uniquement accès à des objets de type vues, procédures stockées, sans possibilité de faire des requêtes SQL directes sur la base.
    Et idéalement, il faut un découplage protocolaire : le programme attaque un service API (appel de fonctions propre à l'environnement de dev) qui relaie les appels en procédures stockées vers le serveur SGBD. Le programme ne voit donc plus du tout la base de données.
    C'est effectivement plus lourd, mais de cette façon, il n'est plus possible de faire d'injection SQL.
    Cela permet également de scinder en 3 le dev : une partie pour le programme, une partie pour l'API et une dernier pour le SGBD.

    Une discussion récente qui cause du sujet !
    https://www.developpez.net/forums/d1...developpement/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. échappement de caractères
    Par Mengué georges dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/03/2009, 21h00
  2. [Batch] échappement du caractère %
    Par Choupinou dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 02/10/2008, 09h59
  3. [URL Rewriting] Problème d'échappement de caractère
    Par Artusamak dans le forum Apache
    Réponses: 4
    Dernier message: 06/08/2008, 16h20
  4. [PDO] Méthode prepare() et échappement des caractères spéciaux
    Par {Anthony} dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/01/2008, 14h19
  5. [Tableaux] caractère >> impossible à effacer
    Par Invité(e) dans le forum Langage
    Réponses: 8
    Dernier message: 10/10/2006, 12h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo