Marky Angel Kevin Garcia Ответов: 3

Дело Vb.net чувствительный использованием инструментальных средств СУБД MySQL


Привет я новичок здесь просто хочу обратиться за помощью по моему проекту мне нужна моя форма входа чтобы принять только то что пользователи зарегистрировали учетные данные и да они могут войти используя там учетные данные но дело в том что даже если пароль написан прописными буквами пользователь может получить доступ к нему только с помощью строчной буквы пожалуйста помогите ТИА

Что я уже пробовал:

вот мой код

Imports MySql.Data.MySqlClient

Public Class Login
    Private Sub Login_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        End
    End Sub
    Private Sub Login_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        txtuser.Select()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnlogin.Click
        Try
            DbOpen()
            Dim query = "Select * from login where Username= '" & txtuser.Text & "' AND Password = '" & txtpass.Text & "'"
            Dim cm As New MySqlCommand(query, cn)
            Dim reader = cm.ExecuteReader
            If reader.Read Then
                'login success

                Dim role = reader("Userlevel").ToString
                Dim name = reader("Name").ToString
                reader.Close()
                If role = "ADMIN" Then

                    Audit(role, name, "Login Success")
                    MsgBox("Welcome Admin", vbInformation, "System Message.")
                    Me.Dispose()


                    Panels.ShowDialog()

                    txtuser.Clear()
                    txtpass.Clear()
                    role = ""
                ElseIf role = "STAFF" Then
                    Audit(role, name, "Views the menu")
                    MsgBox("Welcome Staff!", vbInformation, "System Message.")
                    Me.Dispose()



                    staff.ShowDialog()

                    txtuser.Clear()
                    txtpass.Clear()
                    role = ""




                End If
            Else
                'login failed
                MsgBox("Invalid Password! Try Again.", vbInformation, "System Message")
                txtuser.Clear()
                txtpass.Clear()
            End If
            txtuser.Select()
        Catch ex As MySqlException
            MessageBox.Show(ex.Message)
        Finally
            DbClose()
        End Try
        ' POS.Timer1.Start()
        'POS.lbltime.Text = Date.Now.ToString("hh:mm:ss tt")
        'POS.lbldate.Text = Date.Now.ToString("MM/dd/yyyy")


    End Sub

3 Ответов

Рейтинг:
2

Richard MacCutchan

Во-первых, не используйте конкатенацию строк для создания операторов SQL, это делает вашу систему уязвимой для SQL-инъекций. Всегда используйте параметризованные запросы.

Во-вторых, не храните пароли в открытом тексте, всегда используйте соленые хэш-значения. Видеть Безопасная Аутентификация Паролем Объясняется Просто[^]

В-третьих, пароли должны точно совпадать, поэтому, если заглавные буквы являются его частью, они все равно должны быть прописными для входа в систему.


Marky Angel Kevin Garcia

спасибо за вашу помощь сэр

Рейтинг:
1

Wendelius

Не делай так. Никогда не связывайте значения непосредственно с SQL-статусом. Это оставляет вас открытыми для SQL-инъекций. Вместо этого используйте Класс MySqlParameter[^]

Еще одна вещь, которую никогда не следует делать, не храните пароль в виде обычного текста в базе данных. Чтобы сделать это правильно, см. Хранение паролей: как это сделать.[^]. Это также устраняет проблему, которая у вас есть.


Marky Angel Kevin Garcia

спасибо за вашу помощь сэр

Wendelius

Пожалуйста

Рейтинг:
1

Patrice T

query = "Select * from login where Username= '" & txtuser.Text & "' AND Password = '" & txtpass.Text & "'"

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]