Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 27
  1. #11
    Puoi mostrare il codice "corretto"?

  2. #12
    Il mio problema è che non mi fa la comparazione tra il valore delle taxtbox e il valore del db. Ora posto il codice completo:

    Dim Pwd As String
    Dim User As String
    Dim strconn As String
    Dim conn As OleDb.OleDbConnection
    Dim myAdapter As OleDb.OleDbDataAdapter
    Dim myCommand As OleDb.OleDbCommand

    strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Documents and Settings\Utente\Documenti\Progetti VB\RemedyDB.mdb'"
    conn = New OleDb.OleDbConnection(strconn)
    conn.Open()

    User = "SELECT Username FROM Utenti WHERE Username = '" & nomeUtente.Text & "'"
    Pwd = "SELECT Password FROM Utenti WHERE Username = " & nomeUtente.Text

    myCommand = New OleDb.OleDbCommand(User, conn)
    myAdapter = New OleDb.OleDbDataAdapter(myCommand)
    Dim result As OleDb.OleDbDataReader

    result = myCommand.ExecuteReader

    If result.HasRows = 0 Then
    MsgBox("Query eseguita non correttamente")
    Else
    MsgBox("Query eseguita correttamente")
    End If

    If nomeUtente Is Nothing OrElse nomeUtente.Text = "" Then
    MessageBox.Show("Inserire l'username per accedere.", "ERRORE", MessageBoxButtons.OK)
    Exit Sub
    End If

    If password Is Nothing OrElse password.Text = "" Then
    MessageBox.Show("Inserire la password per accedere.", "ERRORE", MessageBoxButtons.OK)
    Exit Sub
    End If

    If nomeUtente.Text.Equals(User) And password.Text.Equals(Pwd) Then
    MessageBox.Show("Login eseguito correttamente.", "Login", MessageBoxButtons.OK)
    Else
    MessageBox.Show("Username o password errati", "Login", MessageBoxButtons.OK)
    'MessageBox.Show("Username= " & User & " Password= " & Pwd, "Login", MessageBoxButtons.OK)
    End If

    conn.Close()

    myAdapter.Dispose()
    myCommand.Dispose()
    conn.Dispose()

  3. #13
    Originariamente inviato da Scorpio2010

    If nomeUtente.Text.Equals(User) And password.Text.Equals(Pwd) Then
    MessageBox.Show("Login eseguito correttamente.", "Login", MessageBoxButtons.OK)
    Else
    MessageBox.Show("Username o password errati", "Login", MessageBoxButtons.OK)
    'MessageBox.Show("Username= " & User & " Password= " & Pwd, "Login", MessageBoxButtons.OK)
    End If
    Il problema sta nel fatto che non mi entra nell'if ma va sempre nell'else.

  4. #14
    Quel confronto non ha senso, in User e Pwd c'è il testo delle query che hai effettuato al DB, non i loro risultati!

    E in ogni caso:
    • usa le query parametriche, maremma cinghiala, chiunque non usi query parametriche, specie durante l'autenticazione, meriterebbe l'interdizione a vita da qualunque strumento informatico;
    • non memorizzare le password in plaintext nel DB, altro misfatto per cui prevederei la stessa pena. Nel DB si memorizzano gli hash delle password, così che il programma quando l'utente inserisce una password ne computa l'hash e lo confronta con quello situato nel DB; se coincidono l'autenticazione è riuscita, se no niente. In questa maniera la privacy degli utenti è garantita (il db admin non deve poter conoscere le password degli utenti, specie visto che si sa che gli utenti riciclano spesso le stesse password per più servizi), e in più un eventuale cracker che ottenesse un dump del database non lo potrebbe comunque sfruttare per accedere all'applicazione con i dati degli utenti.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #15
    Originariamente inviato da MItaly
    Quel confronto non ha senso, in User e Pwd c'è il testo delle query che hai effettuato al DB, non i loro risultati!

    E in ogni caso:
    • usa le query parametriche, maremma cinghiala, chiunque non usi query parametriche, specie durante l'autenticazione, meriterebbe l'interdizione a vita da qualunque strumento informatico;
    • non memorizzare le password in plaintext nel DB, altro misfatto per cui prevederei la stessa pena. Nel DB si memorizzano gli hash delle password, così che il programma quando l'utente inserisce una password ne computa l'hash e lo confronta con quello situato nel DB; se coincidono l'autenticazione è riuscita, se no niente. In questa maniera la privacy degli utenti è garantita (il db admin non deve poter conoscere le password degli utenti, specie visto che si sa che gli utenti riciclano spesso le stesse password per più servizi), e in più un eventuale cracker che ottenesse un dump del database non lo potrebbe comunque sfruttare per accedere all'applicazione con i dati degli utenti.
    Il programma che sto facendo è un programma di utilità che serve per automatizzare alcune azioni che sono "stupide" e ripetitive. Gli utenti che andranno ad utilizzare questo programma sono persone che non hanno interesse a manomettere il programma, perchè ciò andrebbe a loro discapito.
    Per quanto riguarda le query parametriche ora mi informo.
    Per quanto riguarda quello che hai scritto sulla memorizzazione delle password mi sembra arabo e pertanto ti chiedo la cortesia di spiegarti meglio.

  6. #16
    Originariamente inviato da Scorpio2010
    Il programma che sto facendo è un programma di utilità che serve per automatizzare alcune azioni che sono "stupide" e ripetitive. Gli utenti che andranno ad utilizzare questo programma sono persone che non hanno interesse a manomettere il programma, perchè ciò andrebbe a loro discapito.
    Non ha importanza, lo smanettone di turno è sempre in agguato, e si tratta di normalissime best-pratices che è bene seguire, anche perché non costa nessuna fatica. L'uso del metodo ExecuteReader fa sì che in questo caso sia impossibile modificare il DB via SQL injection, ma non impedisce comunque l'inserimento di comandi SQL non desiderati nella tua query, che possono sempre dare problemi. Inoltre se non usi le query parametriche nemmeno quando fai degli INSERT o degli UPDATE allora il già citato burlone di turno ti può facilmente distruggere il DB.
    Per quanto riguarda le query parametriche ora mi informo.
    Eh però animo, è due settimane che ti abbiamo segnalato il problema.
    Per quanto riguarda quello che hai scritto sulla memorizzazione delle password mi sembra arabo e pertanto ti chiedo la cortesia di spiegarti meglio.
    Cosa non ti è chiaro?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #17
    Eh però animo, è due settimane che ti abbiamo segnalato il problema
    Hai ragione però è pure vero che sono mancato dal lavoro per una settimana e quindi non ci ho potuto mettere mano e inoltre quando sto al lavoro ci posso lavorare solo la mattina.

    Sono riuscito a trovare su internet il modo per fare le query parametriche, anche se però ci sono degli errori nella query. Ora posto il codice:

    Dim Pwd As String
    Dim User As String
    Dim strconn As String
    Dim conn As OleDb.OleDbConnection
    Dim myAdapter As OleDb.OleDbDataAdapter
    Dim myCommand As OleDb.OleDbCommand

    strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Documents and Settings\Utente\Documenti\Progetti VB\RemedyDB.mdb'"
    conn = New OleDb.OleDbConnection(strconn)
    conn.Open()

    'User = "SELECT Username FROM Utenti WHERE Username = '" & nomeUtente.Text & "'"
    'Pwd = "SELECT Password FROM Utenti WHERE Username = " & nomeUtente.Text
    User = "SELECT Username FROM Utenti WHERE Username = ?"
    Pwd = "SELECT Password FROM Utenti WHERE Username = ?"

    myCommand = New OleDb.OleDbCommand(User, conn)
    myAdapter = New OleDb.OleDbDataAdapter(myCommand)

    myCommand.Parameters.AddWithValue("Username", nomeUtente.Text)

    Dim result As OleDb.OleDbDataReader

    result = myCommand.ExecuteReader

    If result.HasRows = 0 Then
    MsgBox("Query eseguita non correttamente")
    Else
    MsgBox("Query eseguita correttamente")
    End If
    ...

    Il problema sta nella stringa select... Username = ? infatti così mi da eccezione (InvalidComObjectException) e mi si ferma su myCommand.Dispose()

    P.s.: grazie ancora per la pazienza

  8. #18
    In primo luogo dovresti fare un'unica query, fatta così:
    codice:
    SELECT Username, Password FROM Utenti WHERE Username=@Username AND Password=@Password
    (le parole che iniziano con la @ sono i placeholder, che il DBMS andrà a sostituire con i dati effettivamente passati tramite parametri)
    e quindi
    codice:
    myCommand.Parameters.AddWithValue("Username", nomeUtente.Text)
    myCommand.Parameters.AddWithValue("Password", password.Text)
    Dim result As OleDb.OleDbDataReader
    
    result = myCommand.ExecuteReader
    
    If result.HasRows Then
        MsgBox("Login effettuato correttamente")
    Else
        MsgBox("Login errato")
    End If
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #19
    Grande! Ora funzionerebbe se dopo

    If result.HasRows Then
    MsgBox("Login effettuato correttamente")

    ci mettessi le istruzioni per aprire un'altra finestra e per chiudere quella di login. Infatti siccome ancora non ce l'ho messe, perchè ancora non ho fatto l'altra finestra, mi da l'eccezione che ti dicevo poco fa. Giusto?

  10. #20
    Perfetto!!! Ora che ho fatto l'altra finestra funziona alla perfezione! Grazie mille a tutti, ma soprattuto a MItaly.
    Per quanto mi rigurda la discussione può essere chiusa e mi auguro che possa essere di aiuto a molti altri.

    Ciao a tutti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.