0

我是编码界的新手,

我建立了一个带有几个文本框的大型网站,所以现在我发现我一直在使用一种危险的方法在 SQL 服务器中插入数据,如下所示:

 execSQL("insert into Dossier(ID_Dossier,Nom_Giac) values(" & id_dossier.text & "," Nom_gaic.text & "')")

     Public Function execSQL(ByVal req As String, Optional ByVal type As String = "r")
            cmd = New SqlCommand
            cmd.CommandText = req
            cmd.Connection = con
            openCon()
            If type = "r" Then
                Return cmd.ExecuteReader(CommandBehavior.CloseConnection)
            Else
                Return cmd.ExecuteNonQuery
            End If

        End Function  

我只是想知道使用 LINQ to SQL 是否可以帮助解决我整个网站中的这个问题。为了使用它,我正在学习这门课程:

http://www.upsizing.co.uk/Art34_IntergratingASPSecurity.aspx

4

2 回答 2

5

我只是想知道使用 LINQ to SQL 是否可以帮助解决我整个网站中的这个问题。

从技术上讲,它会因为在内部它将处理您的查询当前缺少的所有参数清理,但是,这并不是说您不能使用已有的代码解决您的问题。您需要做的就是更新您的查询以使用SqlParameters ,例如

command.CommandText = "INSERT INTO Dossier(ID_Dossier,Nom_Giac) values(@id, @giac)"
command.Parameters.AddWithValue("@id" , id_dossier.Text))
command.Parameters.AddWithValue("@giac", Nom_giac.Text)) 
于 2013-01-24T13:35:11.117 回答
1

您不需要仅将 LINQ to SQL 用于 SQL 注入。您可以使用您所做的并对其进行修改以使用以下参数:

execsql("insert into Dossier(ID_Dossier,Nom_Giac) values(@dossier, @nom", param1, param2)

这些参数需要手动添加到命令中:

cmd = New SqlCommand
cmd.CommandText = req
cmd.Parameters.Add("ID_Dossier", <Type>).Value = dossier
cmd.Parameters.Add("Nom_Giac", <Type>).Value = nom

.
.

因此,您的方法接受参数的 ParamArray,并将它们传递给命令。显然,解决方案需要比我提供的更通用,但希望这能让你开始。

于 2013-01-24T13:36:55.903 回答