以文本方式查看主题 - 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) |