none
authentification par base de données. RRS feed

  • Question

  • Salut à tous,
    Je veux sécuriser l'exploitation dune application que je suis entrin de créer et pour cela j'ai fait une base de donnée dans laquelle j'ai enrégistré le username et mot de passe. Voici le code de mon application pour valider l'authentification:
    Private Sub Button1_Click(....)
     if TextBox1.Text="" Or TextBox2.Text="" Then
     Msgbox("Merci de remplir tous les champs")
    Else:Try
      Dim connectionString As String="Server=SWEET-49EF63535\SQLEXPRESS;Database=SUPSEC;Trusted_connection=True;"
    Dim connection As SqlConnection=New SqlConnection(connectionString)
    connection.Open()
    Dim command As sqlcommand=New SqlCommand("SELECT usrname,mot_de_passe FROM authentification WHERE username='" & TextBox1.Text & "' and mot_de_passe='" & TextBox2.Text & "',connection")
    Dim reader As SqlDataReader=command.ExecuteReader
    if reader.HasRows() Then
     Me.Close()
     Form2.Show()
    Else 
    MsgBox("Identifiants incorrects!")
    TextBox1.Text=""
    TextBox2.Text=""
    End if 
    reader.Close()
    connection.Close()
    Catch ex As Ecxeption
     MsgBox(ex.Message())
    End Try
    End If
    End Sub
    Avec ce code j'ai une erreur du genre:"ExecuteReader: la propriété Connection n'a pas été initialisée"
    D'où peut provenir mon erreur?
    samedi 16 janvier 2010 11:59

Réponses

  • Bonjour,

    Le problème si situe au niveau de la déclaration de votre objet command (command ne sait pas quelle connection utiliser).

    Il vous faut utiliser soit New SqlCommand ("Votre requête", connection) ou command.Connection = connection

    Ensuite, vous pouvez ouvrir votre connection et faire votre command.ExecuteReader.

    Cordialement,

    Mathieu
    Mathieu Francesch Sharplog Engineering
    samedi 16 janvier 2010 12:19

Toutes les réponses

  • Bonjour,

    Le problème si situe au niveau de la déclaration de votre objet command (command ne sait pas quelle connection utiliser).

    Il vous faut utiliser soit New SqlCommand ("Votre requête", connection) ou command.Connection = connection

    Ensuite, vous pouvez ouvrir votre connection et faire votre command.ExecuteReader.

    Cordialement,

    Mathieu
    Mathieu Francesch Sharplog Engineering
    samedi 16 janvier 2010 12:19
  • Merci j'ai résolu le problème sauf que à chaque fois que je vais sur les formulaires suivantes, à chaque le 1er formulaire d'authentification ressurgit .Pourquoi ça?
    samedi 16 janvier 2010 12:51
  • Bonjour,

    Malheureusement, à partir du code que vous avez publié, il est difficile d'expliquer ce comportement. Il peut y avoir plusieurs raisons pour lesquelles votre formulaire d'authentification s'affiche. 

    De quelle manière et où se trouve le code qui se charge d'ouvrir votre formulaire d'authentification ?

    Cordialement, 

    Mathieu
     




    Mathieu Francesch Sharplog Engineering
    samedi 16 janvier 2010 13:20
  • Bonjour errata,

    Tu as manifestement envie de sécuriser ton application.
    Voilà un guide intéressant pour une prise de conscience concernant la sécurité d'une application.
    Dans son cas, c'est une application ASP, mais les directives restent les mêmes et la plupart des concepts sont applicables en VB.Net :
    http://www.dotnet-tech.com/tutoriels/secu3/


    Dans un souci de sécurité, il y a donc plusieurs choses à faire.

    1. Créer une connexion SQLServer spéciale pour le login qui soit juste read-only.
    2. Crypter tes chaines de connexion à la base.
    3. Créer une commande paramétrée et pas une qui provient d'une concaténation de string : http://faqvbnet.developpez.com/?page=adonet#adonet_execparam
    4. Modifier ta requête pour faire une validation en 2 temps, tu ne ramènes que le mot de passe de la base, et tu le valides avec le user dans son code.
    5. Faire une validation Regex des paramètres login et password, n'autoriser par exemple que les caractères de type word, regex =  \w+
    6. Mettre un coup de dotfuscator.

    Je peux t'aider pour chacune de ces phases si tu ne vois pas trop à quoi ca correspond ou si tu n'arrives pas à t'en sortir.

    Cordialement,

    Thomas

    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    samedi 16 janvier 2010 15:09
  • Salut à tous,
    Mon problème en fait c'est le fait que le premier formulaire ressurgisse quelque temps après que le second formulaire soit apparue.Je vous remontre le code que j'ai fait:
    Private Sub Button1_Click(....)
     if TextBox1.Text="" Or TextBox2.Text="" Then
     Msgbox("Merci de remplir tous les champs")
    Else:Try
      Dim connectionString As String="Server=SWEET-49EF63535\SQLEXPRESS;Database=SUPSEC;Trusted_connection=True;"
    Dim connection As SqlConnection=New SqlConnection(connectionString)
    connection.Open()
    Dim command As sqlcommand=New SqlCommand("SELECT usrname,mot_de_passe FROM authentification WHERE username='" & TextBox1.Text & "' and mot_de_passe='" & TextBox2.Text & "',connection")
    Dim reader As SqlDataReader=command.ExecuteReader
    if reader.HasRows() Then
     Me.Close()
     Form2.Show()
    Else 
    MsgBox("Identifiants incorrects!")
    TextBox1.Text=""
    TextBox2.Text=""
    End if 
    reader.Close()
    connection.Close()
    Catch ex As Ecxeption
     MsgBox(ex.Message())
    End Try
    End If
    End Sub
    
    Quelle pouvait en etre la cause?
    lundi 18 janvier 2010 12:36
  • Bonjour errata11,

    Ce code, si je comprends bien, se trouve dans votre premier formulaire ? Et quand vous faites

     

    Me.Close()
    Form2.Show()

     

    que se passe-t-il ? C’est quoi Form2 ? Peut-être vous avez mis là-bas du code qui fait appel de nouveau au formulaire initial ?

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    lundi 18 janvier 2010 13:41
  • Form2 c'est le formulaire qui doit etre directement montré en s'authentifiant correctement à partir du premier formulaire.Et nul part on aura encore besoin du premier formulaire.Donc je ne l'ai plus utilisé dans aucun formulaire.

    Me .Close() 
    se refère au premier formulaire. Ce premier n'est pas le formulaire de démarrage de l'application puisque j'ai un form splash screen qui débute.
    lundi 18 janvier 2010 13:47
  • Bonjour errata,

    Il sera difficile sans voir votre projet de voir d'où provient cette réapparition du Form1.
    Ce que je peux vous conseiller, c'est de mettre un breakpoint sur l'initialisation du Form1, et cela mettra votre application en pause lors de la réapparition de votre formulaire.
    Vous pourrez alors déterminer où vous en étiez de votre exécution, et donc voir d'où a été appelé le formulaire.

    Si cela ne donne rien, alors vérifiez bien aussi que vous détruisez bien le Form1 une fois que vous n'en avez plus besoin.

    Cordialement,

    Thomas
    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    samedi 23 janvier 2010 22:08