0

我不知道如何避免 SQL 注入,有人可以帮我解决我的问题吗?

这是我当前的代码:

Private Function INSERT() As String
        Dim SQLcon As New SqlConnection
        Dim SQLdr As SqlDataReader
        Try
            SQLcon.ConnectionString = "Data Source=#####;Initial Catalog=OJT;Persist Security Info=True;User ID=####;Password=#####"
            Dim SQLcmd As New SqlCommand("INSERT INTO dbo.Patients(pIDNo,pLName,pFName,pMI,pSex,pStatus,pTelNo,pDocID,pAddr,pStreet,pBarangay,pCity,pProvince,pLNameKIN,pFNameKIN,pMIKIN,pRelationKIN) VALUES('" & LabelPNumber.Text & "','" & txtLname.Text & "','" & txtFname.Text & "','" & txtMI.Text & "','" & txtPatientSex.Text & "','" & txtPatientSex.Text & "','" & txtPatientTelNo.Text & "','" & txtPatientDoctor.Text & "','" & txtStreetNumber.Text & "','" & txtStreetName.Text & "','" & txtBarangay.Text & "','" & txtCity.Text & "','" & txtProvince.Text & "','" & txtKinLname.Text & "','" & txtKinFname.Text & "','" & txtKinMI.Text & "','" & txtRelationToPatient.Text & "') ", SQLcon)
            SQLcon.Open()
            MsgBox("Patient Added!", MsgBoxStyle.Information)
            SQLdr = SQLcmd.ExecuteReader()
        Catch ex As Exception
            MessageBox.Show("Error Occured, Can't Add Patient!" & ex.Message)
        Finally
            SQLcon.Close()
        End Try
        Return "done"
    End Function
4

1 回答 1

4

基本上,任何将字符串连接在一起以创建 SQL 语句的地方,尤其是来自用户输入的语句,都是易受攻击的。

不用这样做,而是使用 SQL 参数,可以将其添加到 SQL 命令的 Parameters 属性中(SQLcmd此处)。

我将向您展示一个带有您的参数之一的示例 - 将您的 SQLCommand 文本更改为:

INSERT INTO dbo.Patients(pIDNo, ...)
VALUES(@pIDNo, ...)

where是参数值字符串中的“占位符”,它与SQLParameters 集合@pIDNo中的命令分开发送。

然后,您可以添加一个与此“占位符”同名的参数和值(它将根据为您提供的值派生类型)。

这是之前的示例:

SQLcmd.Parameters.AddWithValue("@pIDNo", LabelPNumber.Text)
于 2013-02-02T10:45:03.863 回答