以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何做防止SQL注入?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=193140)

--  作者:lin98
--  发布时间:2024/8/21 10:38:00
--  如何做防止SQL注入?
Dim db = HySql.DataBaseFactory.CreateDatabase("T4") \'

Dim username As String = e.Form.Controls("usernameT").Value
If username = "" Then
    Messagebox.show("请选择用户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Return
End If


Dim Sq-l = "Selec-t * From  用户表  Where Name = \'" & username & "\'"
Dim dt As system.data.DataTable = db.ExecuteDataSet(Sq-l).Tables(0)
\'Msgbox(dt.Rows.Count) 


If dt.Rows.Count = 0 Then
    Messagebox.show("此用户不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Return
End If



If e.Form.Controls("password").text = dr("password").tostring Then \'
    _姓名 = username
    _UFFFGroup = dr("Group").tostring\'

Else
    Messagebox.show("密码错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If

上面是用户登录,网上查一下,说这样会SQL注入,如何有效防止SQL注入?
[此贴子已经被作者于2024/8/21 15:49:24编辑过]

--  作者:y2287958
--  发布时间:2024/8/21 10:41:00
--  
参数化
--  作者:有点蓝
--  发布时间:2024/8/21 10:42:00
--  
使用参数化的方式,具体看组件帮助
--  作者:lin98
--  发布时间:2024/8/21 11:00:00
--  
帮助没找到组件,如何参数化的方式?
百度找VB代码,配合1楼的代码,如何改?

Imports MySq-l.Data.MySqlClient
Imports System.Security.Cryptography
Imports System.Text
 
Public Class LoginForm
 
    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Dim username As String = txtUsername.Text
        Dim password As String = GetMD5Hash(txtPassword.Text)
 
        Using connection As New MySq-lConnection("serve-r=localhost;user id=root;password=your_password;database=your_database")
            Try
                connection.Open()
                Dim query As String = "SELEC-T * FROM users WHERE username = @username AND password = @password"
                Using command As New MySqlCommand(query, connection)
                    command.Parameters.AddWithValue("@username", username)
                    command.Parameters.AddWithValue("@password", password)
 
                    Using reader As MySq-lDataReader = command.ExecuteReader()
                        If reader.HasRows Then
                            MessageBox.Show("登录成功!")
                            \' 这里可以添加代码以进入应用程序的下一个阶段
                        Else
                            MessageBox.Show("用户名或密码不正确。")
                        End If
                    End Using
                End Using
            Catch ex As MySq-lException
                MessageBox.Show("数据库连接失败:" & ex.Message)
            End Try
        End Using
    End Sub
 
    Private Function GetMD5Hash(input As String) As String
        Dim md5 As MD5 = MD5.Create()
        Dim inputBytes As Byte() = Encoding.ASCII.GetBytes(input)
        Dim hashBytes As Byte() = md5.ComputeHash(inputBytes)
        Dim sb As New StringBuilder()
        For Each t As Byte In hashBytes
            sb.Append(t.ToString("X2"))
        Next
        Return sb.ToString()
    End Function
 
End Class


--  作者:有点蓝
--  发布时间:2024/8/21 11:08:00
--  
如果还需要使用HySql,那么请去看这个组件的帮助。没有办法和网上的东西整合到一起
--  作者:lin98
--  发布时间:2024/8/21 14:45:00
--  
那么请去看这个组件的帮助,这个组件的帮助在哪里?狐表帮助窗口设计?
--  作者:有点蓝
--  发布时间:2024/8/21 14:47:00
--  
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=159738&replyID=&skin=1
--  作者:lin98
--  发布时间:2024/8/21 15:48:00
--  
Dim db = HySq-l.DataBaseFactory.CreateDatabase("T4") \'

Dim  username  As String = e.Form.Controls("usernameT").Value
Dim  password  As String = e.Form.Controls("passwordT").Value

If username = "" Then
    Messagebox.show("请选择用户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Return
End If


Dim Sq-l = "Selec-t * From  用户表  Where 姓名 = ? and  密码 = ?" 
Dim dt As Integer = db.ExecuteNonQuery(Sql, HySql.ParameterPair.GetPair("姓名", "username"), HySql.ParameterPair.GetPair("密码", "password")) 


\'If dt.Rows.Count = 0 Then
\'    Messagebox.show("此用户不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
\'    Return
\'End If

 If dt = 0 Then
     Messagebox.show("此用户不存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Return
End If

Dim dr As system.data.DataRow
dr = dt.Rows(0) \' 

If e.Form.Controls("password").text = dr("password").tostring Then \'
    _姓名 = username
    _UFFGroup = dr("Group").tostring\'

Else
    Messagebox.show("密码错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If

问题1:红代码,报错Rows不是Integer,怎么改?参数法是蓝代码那样?
问题2:这个登录很重要,帮处理,让它严谨,安全,防止注入?


--  作者:有点蓝
--  发布时间:2024/8/21 15:52:00
--  
Dim dt As Integer 】dt变量是一个整数,不是表格
--  作者:有点蓝
--  发布时间:2024/8/21 15:56:00
--  
Dim dt As System.Data.DataTable = db.ExecuteDataSet(Sql, HySql.ParameterPair.GetPair("姓名", username), HySql.ParameterPair.GetPair("密码", password)).Tables(0)