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

C# Discussion :

MySql faire une requête paramétrée


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut MySql faire une requête paramétrée
    Bonjour, j'ai un énorme soucis, j'ai fais mon logiciel puis je me suis rendu compte que.. il était vulnérable aux injections SQL donc j'ai voulu mettre en place des requêtes paramétrées, alors quand je les ai testées sur le panel MySql la syntaxe était correcte mais quand je le fais via le logiciel absolument pas, j'ai cherché sur divers sites anglais/français mais rien n'a résolu mon problème, j'ai donc tout remis comme avant c'est à dire très vulnérable et j'aimerai savoir comment le convertir en requêtes paramétrées sans erreurs :/

    Je tiens à préciser que c'est la première fois que j'utilise du MySql sur C#

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
                string query = "SELECT * FROM staff WHERE `mdp` = '" + textBox4.Text + "'";
                cnx.Open();
                if (textBox4.Text == "" || textBox4.Text == " ")
                {
     
                }
                MySqlDataAdapter datardr = new MySqlDataAdapter(query, cnx);
                DataTable dttable = new DataTable();
                datardr.Fill(dttable);
                if (dttable.Rows.Count == 1)
                {
                    string query2 = "SELECT nom FROM staff WHERE `mdp` = '" + textBox4.Text + "'";
                    MySqlCommand commande2 = new MySqlCommand(query2, cnx);
                    string nomstaff = (string)commande2.ExecuteScalar();
                    MessageBox.Show("Bienvenue "+ nomstaff+", les options réservées au membres du Staff sont désormais activées !", "Mode Staff Activé", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    nsComboBox1.Items.Add("Administration");
                    nsComboBox1.Items.Add("Évènements");
                    nsComboBox1.Items.Add("Sanctions du Serveur");
                    textBox4.Enabled = false;
                    nsButton2.Text = "Clé Activée !";
                    button2.Enabled = true;
                    button2.Text = "Surveillance Joueurs";
                    button1.Enabled = true;
                    button1.Text = "Membres du Staff";
                    nsButton2.Enabled = false;
                    if(nomstaff == "masqué" || nomstaff == "masqué" || nomstaff == "masqué"  || nomstaff == "masqué" || nomstaff == "masqué")
                    {
                        Class1.getData = "Autorisé";
                        Class1.permissionsstaff = "Autorisé";
                    }
     
     
                }
                else
                {
                    MessageBox.Show("Erreur : Cette clé n'existe pas, merci d'inscrire une clé valide.", "Error", MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
                cnx.Close();
    Et voici le code "sécurisé" avec l'erreur(Erreur ligne 21) : Erreur dans la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    string ConnexionSQL = "SERVER=sql11.freemysqlhosting.net; PORT=3306; DATABASE=sql11229992; UID=sql11229992;PWD=uTbtVndAeI;";
                maConnexionSQLsrv = new MySqlConnection(ConnexionSQL);
                //string query = "SELECT * FROM staff WHERE `mdp` = '" + textBox4.Text + "'";
                maRequete = "SELECT * FROM staff WHERE `mdp` = @mdpjoueur";
                myCommand = new MySqlCommand(maRequete, maConnexionSQLsrv);
                myCommand.Parameters.Add("@mdpjoueur", textBox4.Text);
                // myCommand.Parameters["@mdpjoueur"].Value = textBox4.Text;
                MessageBox.Show("OK");
     
                try
                {
                    //Execution de la requête 
                    MySqlDataAdapter datardr = new MySqlDataAdapter(System.Convert.ToString(myCommand), maConnexionSQLsrv);
                    DataTable dttable = new DataTable();
                    datardr.Fill(dttable);
                    //"INSERT INTO [article] ( [idclient],[idarticle],[prixarticle]) VALUES(@id_article, @prix_article, @nom_article)"; 
     
                    if (dttable.Rows.Count == 1)
                    {
                        c = new MySqlCommand("select nom from staff where mdp = @Value;", maConnexionSQLsrv);   //<-------- l'érreur est ici
                        c.Parameters.AddWithValue("@Value", textBox4.Text);
     
     
                      //  maRequete2 = "SELECT `nom` FROM staff WHERE `mdp` like(@mdpjoueur)";
                       // myCommand2 = new MySqlCommand(maRequete2, maConnexionSQLsrv);
                       // myCommand2.Parameters["@mdpjoueur"].Value = textBox4.Text;
                        try
                        {
                            //Execution de la requête 
                            maConnexionSQLsrv.Open();
                            string nomstaff = (string)c.ExecuteScalar();
                            nomstaffmsgbox = nomstaff;
                            MessageBox.Show(nomstaff);
                            maConnexionSQLsrv.Close();
     
                        }
                        catch (MySqlException ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
     
                        //  string query2 = "SELECT nom FROM staff WHERE `mdp` = '" + textBox4.Text + "'";
     
                        MessageBox.Show("Bienvenue " + nomstaffmsgbox + ", les options réservées au membres du Staff sont désormais activées !", "Mode Staff Activé", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        nsComboBox1.Items.Add("Administration");
                        nsComboBox1.Items.Add("Évènements");
                        nsComboBox1.Items.Add("Sanctions du Serveur");
                        textBox4.Enabled = false;
                        nsButton2.Text = "Clé Activée !";
                        button2.Enabled = true;
                        button2.Text = "Surveillance Joueurs";
                        button1.Enabled = true;
                        button1.Text = "Membres du Staff";
                        nsButton2.Enabled = false;
                        if (nomstaff == "Havanna" || nomstaff == "privé" || nomstaff == "privé" || nomstaff == "privé" || nomstaff == "privé")
                        {
                            Class1.getData = "Autorisé";
                            Class1.permissionsstaff = "Autorisé";
                        }
     
     
                    }
                    else
                    {
                        MessageBox.Show("Erreur : Cette clé n'existe pas, merci d'inscrire une clé valide.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (MySqlException ex)
                {
                    MessageBox.Show(ex.Message);
                }
    J'espère que vous pourrez m'aider :/

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    C'est bizarre la notation `mdp`.
    Mais puisque ça y était avant, ça ne doit pas venir de ça à moins que le mécanisme des requête paramétrée ne sache pas l'interpréter.
    Essaie sans le caractère bizarre pour voir.

    Sinon, ce serait plus simple pour nous de t'aider si tu ne fournissais le message d'erreur.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut
    Hey, et bien le soucis c'est que le seul message que j'ai dit que la syntaxe est invalide, sauf que.. pour la première il marche, je l'ai copié collé pour la seconde et modifié un truc, et ça me dit que c'est invalide au niveau de la syntaxe, et les ' bizarres c'est SQL qui les mets : http://prntscr.com/j1zlg9

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2018
    Messages : 22
    Par défaut
    Bon finalement problème résolu, j'ai pas fait de requètes sécurisées mais j'ai directement interdit les caractères autre que chiffres et lettres, donc plus de " # ' ( ; etc

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Tu n'as rien résolu et en plus maintenant tu interdis la saisie d'un mot de passe avec autre chose que des lettres ou des chiffres...
    Bref, c'est encore moins sécurisé qu'avant !

    En règle général le moteur renvoie plus d'informations (en particulier sur une erreur de syntaxe).
    Donc, je persiste... Quel est le message d'erreur exact ?

    De plus, le caractère bizarre ne sert strictement à rien dans ton cas.
    As-tu au moins essayé de l'enlever pour voir si ça passait ?

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

Discussions similaires

  1. DOA : Comment faire une requête avec paramètre ?
    Par juju1988 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 22/04/2011, 09h27
  2. [AJAX] faire une requête mysql ajax
    Par affreuxzozo dans le forum AJAX
    Réponses: 1
    Dernier message: 04/05/2009, 13h16
  3. Comment faire une requête Mysql
    Par Xavier dans le forum C++Builder
    Réponses: 5
    Dernier message: 01/02/2007, 17h07
  4. Réponses: 7
    Dernier message: 11/10/2006, 13h35
  5. [ADO.Net][C#/Mysql] Comment exécuter une requête paramétrée?
    Par wremacle dans le forum Accès aux données
    Réponses: 6
    Dernier message: 07/02/2006, 16h55

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