Member 13347171 Ответов: 2

У меня возникли проблемы с моей формой входа в систему с журналом данных он продолжает оштукатуриваться нужна помощь пожалуйста спасибо


у меня возникли проблемы с моей формой входа в систему с журналом данных он продолжает застревать нужна помощь пожалуйста спасибо

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

Private Sub loginbtn_Click(sender As System.Object, e As System.EventArgs) Handles loginbtn.Click
        sqlconn = New MySqlConnection
        sqlconn.ConnectionString = "server=localhost;user id=root;password=;database=issa"
        Dim reread As MySqlDataReader

        Try
            sqlconn.Open()
            Dim query As String

            query = "SELECT * from usersetup where Username='" & usernametxtbx.Text & "'and Password = '" & passtxbx.Text & "'"
            commando = New MySqlCommand(query, sqlconn)
            reread = commando.ExecuteReader
            Dim coount As Integer = 0

            While reread.Read
                coount = coount + 1
            End While

            strSQL = "Insert into datalogin (Username, Date, Time) values ('" & usernametxtbx.Text & "','" & date1.Text & "', '" & time1.Text & "')"
            Dim dd As New MySqlDataAdapter(strSQL, CONNECTION)
            dd.Fill(dss)
            usernametxtbx.Text = ""
            passtxbx.Text = ""

           
            If coount = 1 Then
                
                If (reread.Item("Restriction").ToString()) = "Admin" Then
                    MessageBox.Show(" Login Successfull as ADMIN. . . ")
                    officialpage.Show()
                    Me.Hide()
                Else
                    MessageBox.Show(" Login Successfull as GUEST. . . ")
                    guestpublic.Show()
                    Me.Hide()

                End If

            ElseIf coount = 1 Then
                MessageBox.Show("Record Duplicated...")
            Else
                MessageBox.Show("Log in failed... Either Username or Password is not correct...")
            End If
            sqlconn.Close()
        Catch ex As Exception
        End Try

    End Sub

RickZeeland

И как вы определили поля Дата и время в вашей таблице datalogin ?

2 Ответов

Рейтинг:
2

Patrice T

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

Цитата:
query = "SELECT * from usersetup where Username='" & usernametxtbx.Text & "'and Password = '" & passtxbx.Text & "'"

Пример:
passtxbx.Text= "abc' or '1'='1"

ваш запрос
... "'and Password = 'abc' or '1'='1'"

и всегда будет принят в качестве действительного пароля, каким бы ни был настоящий пароль.


Рейтинг:
1

OriginalGriff

Не делай этого так!
Есть две серьезные проблемы с этим кодом, и они взаимосвязаны:
1) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

2) Никогда не храните пароли в открытом тексте - это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]- код написан на C#, но он довольно прост, и онлайн-конвертеры могут перевести его для вас, если это необходимо.

Сложите эти две проблемы вместе, и Ваш логин бесполезен: я могу обойти вашу безопасность и войти в систему как вы с полными правами администратора, просто введя свое имя пользователя как

Member 13347171';--
и оставить поле с паролем пустым.

Исправьте это здесь, исправьте это в остальной части вашего кода, а затем беспокойтесь о проблеме, которую вы заметили.

И перестаньте глотать исключения: пустые блоки catch просто выбрасывают всю информацию, необходимую для решения проблемы!