【问题标题】:SQL injection in Visual Basic 2010Visual Basic 2010 中的 SQL 注入
【发布时间】:2013-01-17 15:14:06
【问题描述】:

我不知道如何避免 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

【问题讨论】:

  • 使用parameters
  • 任何带有参数 sir rene 的 SELECT STATEMENT 示例?
  • 其他同事指定,使用sql-parameters。我今天为this other question 写了一个样本,您可能也感兴趣。
  • 还记得使用一个好的混淆器,因为 .net 应用程序很容易被反编译,从而泄露所有源代码和数据库的所有密码。混淆器不会解决这个问题,但会使它变得更加困难。无论如何,我不会将 .net 用于您提供给公众的数据库应用程序。
  • 您可能对 Security.SE How can I explain SQL injection without technical jargon?上的这个相关问题感兴趣

标签: vb.net sql-server-2008 sql-server-2005 sql-injection


【解决方案1】:

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

使用 SQL 参数代替此操作,可将其添加到 SQL 命令的 Parameters 属性(此处为SQLcmd)。

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

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

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

然后你可以添加一个与这个“占位符”同名的参数,以及值(它将从为你提供的值中派生出类型)。

这是之前的例子:

SQLcmd.Parameters.AddWithValue("@pIDNo", LabelPNumber.Text)

【讨论】:

  • 你能给我一些带有 SQL 参数的代码示例吗,我对这个编程领域有点陌生。我的 SELECT STATEMENT 上有一个 SQL 参数,但我不知道如何在 INSERT STATEMENT 中执行它,你能给我一个吗?
  • @Danjor 当你写这篇文章时,我正在编辑 - 请参阅我的编辑。
  • 感谢代码,我会将它应用到我的程序中,我只是想避免 SQL 注入 >.
猜你喜欢
  • 2012-02-29
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
相关资源
最近更新 更多