Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共18 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

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

1楼
lin98 发表于: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编辑过]
2楼
y2287958 发表于:2024/8/21 10:41:00
参数化
3楼
有点蓝 发表于:2024/8/21 10:42:00
使用参数化的方式,具体看组件帮助
4楼
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

5楼
有点蓝 发表于:2024/8/21 11:08:00
如果还需要使用HySql,那么请去看这个组件的帮助。没有办法和网上的东西整合到一起
6楼
lin98 发表于:2024/8/21 14:45:00
那么请去看这个组件的帮助,这个组件的帮助在哪里?狐表帮助窗口设计?
7楼
有点蓝 发表于:2024/8/21 14:47:00
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=159738&replyID=&skin=1
8楼
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:这个登录很重要,帮处理,让它严谨,安全,防止注入?

9楼
有点蓝 发表于:2024/8/21 15:52:00
Dim dt As Integer 】dt变量是一个整数,不是表格
10楼
有点蓝 发表于: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 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .04688 s, 2 queries.