Foxtable(狐表)用户栏目专家坐堂 → 如何做防止SQL注入?


  共有2526人关注过本帖树形打印复制链接

主题:如何做防止SQL注入?

帅哥哟,离线,有人找我吗?
lin98
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
如何做防止SQL注入?  发帖心情 Post By:2024/8/21 10:38:00 [显示全部帖子]

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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/21 14:45:00 [显示全部帖子]

那么请去看这个组件的帮助,这个组件的帮助在哪里?狐表帮助窗口设计?

 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By: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:这个登录很重要,帮处理,让它严谨,安全,防止注入?


 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/22 9:29:00 [显示全部帖子]

Dim dt As System.Data.DataTable = db.ExecuteDataSet(Sql, HySql.ParameterPair.GetPair("姓名", username), HySql.ParameterPair.GetPair("密码", password)).Tables(0) 

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

If e.Form.Controls("password").text = dr("password").tostring Then '
这个放在服务端,没报错,能正常运行,放在客户端报错:列“password”不属于表 Table。如何解决?

    _姓名 = username
    _UFFGroup = dr("Group").tostring'

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



 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/22 10:12:00 [显示全部帖子]

用户表是password是有这个列,
在服务端,没报错,能正常运行,放在客户端报错:列“password”不属于表 Table。如何解决?

 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/22 10:20:00 [显示全部帖子]

Dim db = HySql.DataBaseFactory.CreateDatabase("t4")
Dim pts() As String = e.UserName.Split(".")
Dim Sql-2 = "SELEC-T *  From  用户表  Where  好友 = '" & pts(0) & "' and  姓名='" & pts(1) & "'  ;" '"
Dim dt As system.data.DataTable = db.ExecuteDataSet(Sq-l2).Tables(0)
dt.TableName = "用户表" '"

Dim dr1 As system.data.DataRow
dr1 = dt.Rows(0) ' 
If dr1 Is Nothing Then '
    e.Message = "用户名错误!" '返回给登录者的提示信息
    Return
End If
If dr1("password") <> e.Password Then '
    e.Message = "登录密码错误!" 
    Return
End If

服务端的网络监视器有上面代码
问题一;Dim Sql-2 = "SELEC-T *  From  用户表  Where  好友 = '" & pts(0) & "' and  姓名='" & pts(1) & "'  ;" '"   
会SQL注入吗?如果会,要用占位?如何解决?
问题二;会不会, 上面代码,与11楼红代码冲突,产生报错


 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/22 16:43:00 [显示全部帖子]

Dim Sql-2 = "SELEC-T *  From  用户表  Where  好友 = '" & pts(0) & "' and  姓名='" & pts(1) & "'  ;" '"   

改为参数化,没报错,这样改正确?

Dim Sql-2 = "SELEC-T *  From  用户表  Where  好友 = ?and  姓名=?"   
Dim dt As System.Data.DataTable = db.ExecuteDataSet(Sql, HySql.ParameterPair.GetPair("好友", pts(0)), HySql.ParameterPair.GetPair("姓名", pts(1))).Tables(0) 

 回到顶部