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

Langage SQL Discussion :

Comment prévenir les injections SQL en mode fulltext in boolean mode ?


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Points : 88
    Points
    88
    Par défaut Comment prévenir les injections SQL en mode fulltext in boolean mode ?
    Bonjour,

    je souhaiterais utiliser des recherches en mode fulltext in boolean mode , mais je ne sais pas comment prevenir les attaque de type injection sql, étant donné que ce mode authorise pas mal de jcker
    qui risque d'etre neutralisé par les fonction de prevention classique.

    envous remerciant !

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    De la même façon que d'habitude : en utilisant des REQUETES PARAMETREES.

    Exemple ici avec C# + SQL Server, mais cela s'applique à TOUS les languages du marché et TOUS les SGBD

    (enfin... tous les langages et SGBD qui peuvent se targuer d'en être... genre PHP et MySQL, y'a pas si longtemps, en était toujours incapable... mais bon, PHP est tous sauf un langage de programmation, et MySQL est tout sauf un SGBD )

    http://webman.developpez.com/article...ameter/csharp/
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Points : 88
    Points
    88
    Par défaut
    Bonjour,

    merci pour la réponse,

    je comprend la logique et j'utilise moi meme les réquetre préparametré pour les requete simple

    la mon soucis c'est qu'il s'agit ici de recherche a l'interieur de texte s'articulant autour de plusieur champs, l'utilisateur a donc le choix de remplir ou non les champ ou en utilisant des jockers
    et de specifier si les mot de chaque champs doivent etre présent en meme temp ou non (champ A AND champB ou champA OR champB).

    bref un vrai moteur de recherche.

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Hmmmm, ce que vous décrivez c'est pas du FULL TEXT.

    Le full text, on tape dans un index (qui peut porter sur plusieurs colonnes). Et la "requête" full text n'est qu'une simple chaîne de caractères qu'on passe en paramètre.
    Quant à la liste des colonnes (qui peuvent être multiples, y compris depuis plusieurs tables) il faudra simplement la gérée depuis le programme, et non les faire saisir par l'utilisateur. Prévoir donc une IHM qui permet de choisir les colonnes de la recherche avec les opérateurs booléens à appliquer dessus.

    Exemple avec SQL Server 2014 :
    https://msdn.microsoft.com/en-us/library/ms142583.aspx

    On voit que la liste des colonnes/tables est bien séparée de la requête elle-même, qui est une simple chaîne de caractères (et donc peut être un paramètre).
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Points : 88
    Points
    88
    Par défaut
    Bon apres reflexion et je laisse tomber le fulltext mode vu que mysql utilise 90% de la ponctuation comme wildcard (parenthese, apostrophe et les tiret) dans ce mode, je me retrouve vac des requete qui sont soit buggé soit ne donne aucun resultat.

    du coup je pars sur un implementation maison du LIKE :

    "mot ou phrase" = SELECT * FROM table WHERE Description LIKE 'mot ou phrase %' OR Description LIKE '% mot ou phrase %' OR Description LIKE '% mot ou phrase' OR Description LIKE '% mot ou phrase,%' OR Description LIKE '% mot ou phrase\.%' OR Description LIKE '% mot ou phrase)%'

    mot* = SELECT * FROM table WHERE Description LIKE '% mot%' OR Description 'mot%' OR Description LIKE '%(mot%' Description LIKE '%\'mot%' OR Description LIKE '% "mot%'

    *mot = SELECT * FROM table WHERE Description LIKE '%mot %' OR Description '%mot.%' OR Description '%mot, %' OR Description '%mot) %' OR Description LIKE '% "mot%'

    mot = SELECT * FROM table WHERE Description LIKE '% mot %' OR Description '% mot.%' OR Description '% mot, %' OR Description '% mot)%' OR Description LIKE '%\'mot%'

    théoriquement cela devrais marcher.

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Non, ça va pas marcher, ça va juste foutre en l'air ton serveur MySQL.
    Et surtout, fulltext permet de faire des choses bien plus évoluées et performantes que le like (surtout du like seul).

    Poste un exemple de requête complexe avec ponctuation, qu'on se fasse une idée.

    Je doute que la syntaxe soit drastiquement différente de celle de SQL Server, et comme je l'ai dit pour ce dernier, mise à part la liste des colonnes à gérer en faisant attention aux injections, tout le reste peut être géré en requêtes paramétrées.
    On ne jouit bien que de ce qu’on partage.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    À lire sur la comparaison de l'indexation textuelle de MySQmerde et de MS SQL Server (ce dernier étant assez normatif) : http://blog.developpez.com/sqlpro/p9...text_search_no

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/03/2011, 05h55
  2. Réponses: 0
    Dernier message: 21/07/2010, 11h04
  3. [DTS] Comment auditer les transformations sql faites via DTS
    Par danmick dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/08/2005, 08h40
  4. Comment regrouper les 3requêtes SQL?
    Par SkyDev dans le forum Langage SQL
    Réponses: 16
    Dernier message: 06/03/2004, 14h02
  5. [VB6] Comment lister les serveurs SQL d'un domaine ?
    Par WOLO Laurent dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/01/2004, 09h49

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