Try
        Dim connString As String = ConfigurationManager.ConnectionStrings("dbx").ConnectionString
        Dim cmdString As String = "SELECT * FROM Users WHERE UserName = @UserName AND Password = @Password"

        Using conn As New OleDbConnection(connString)
             Using cmd As New OleDbCommand(cmdString, conn)
                conn.Open()
                cmd.Parameters.AddWithValue("@UserName", TextBox1.Text)
                cmd.Parameters.AddWithValue("@Password", TextBox2.Text)

                Dim reader As OleDbDataReader = cmd.ExecuteReader
                dtRowsReturned.Load(reader)
            End Using
        End Using

        If dtRowsReturned.Rows.Count > 0 Then
            Me.Hide()
            Dim dss As New Form1()
            dss.ShowDialog()
        Else
            MessageBox.Show("Account/Password is incorrect Please try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If

    Catch ex As ApplicationException

        MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox1.Clear()
        TextBox2.Clear()
        TextBox1.Focus()
    End Try
End Sub

Private Function IsValidated() As Boolean
    If TextBox1.Text.Trim = String.Empty Then
        MessageBox.Show("Account Required.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox1.Focus()
        Return False
    End If
    If TextBox2.Text.Trim = String.Empty Then
        MessageBox.Show("Passwrd Requried.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox2.Focus()
    End If

    Return False  
End Function
-1
Yiai Yiko 11 Сен 2018 в 06:51

1 ответ

Лучший ответ

Мы не видим начало первого метода, но на основании того, что мы видим, я предполагаю, что перед продолжением он проверяет функцию IsValidated(). Нигде IsValidated() никогда не возвращает True, поэтому остальная часть первого метода никогда даже не попытается запустить проверку пароля. IsValidated() должен выглядеть примерно так:

Private Function IsValidated() As Boolean
    If String.IsNullOrWhiteSpace(TextBox1.Text) Then
        MessageBox.Show("Account Required.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox1.Focus()
        Return False
    End If
    If String.IsNullOrWhiteSpace(TextBox2.Text) Then
        MessageBox.Show("Passwrd Requried.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox2.Focus()
        Return False
    End If

    Return True
End Function

Пока я здесь, НИКОГДА нельзя хранить пароли непосредственно в столбце базы данных. Вам понадобится дополнительный столбец для значения соли для каждого пользователя. Когда пользователь устанавливает новый пароль, вы предварительно добавляете значение соли к паролю, а затем запускаете криптографический хеш (например, BCrypt ) против результата. Затем вы можете сохранить это хеш-значение в базе данных. Когда кто-то пытается войти в систему, вы добавляете соль к его паролю, запускаете тот же алгоритм криптографического хеширования и сравниваете результат с хеш-значением, хранящимся в базе данных. Все, что меньше, действительно небезопасно и непрофессионально.

И это только начало. Также стоит подумать о безопасности памяти (например: SecureString), безопасности транспорта, процессах сброса и т. Д. Короче говоря, вы не хотите писать этот код самостоятельно или каким-либо образом участвовать в создании собственной системы аутентификации. Получить результаты настолько легко, что они кажутся правильными - даже проходят строгие модульные тесты, но ошибочны в таких тонких отношениях, что год спустя вы обнаруживаете, что вас взломали шесть месяцев назад. Вместо этого используйте как можно больше средств аутентификации, уже предоставляемых выбранной вами платформой.

5
Joel Coehoorn 11 Сен 2018 в 14:27