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


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

主题:如何做防止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编辑过]

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


加好友 发短信
等级:狐神 帖子:4773 积分:34673 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2024/8/21 10:41:00 [只看该作者]

参数化

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/21 10:42:00 [只看该作者]

使用参数化的方式,具体看组件帮助

 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/21 11:08:00 [只看该作者]

如果还需要使用HySql,那么请去看这个组件的帮助。没有办法和网上的东西整合到一起

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


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

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

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/21 14:47:00 [只看该作者]

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=159738&replyID=&skin=1

 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | 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:这个登录很重要,帮处理,让它严谨,安全,防止注入?


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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/21 15:52:00 [只看该作者]

Dim dt As Integer 】dt变量是一个整数,不是表格

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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) 

 回到顶部
总数 18 1 2 下一页