2013-01-24 32 views
0

我是一个新的编码的世界,阻止SQL注入通过使用LINQ to 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可以帮助我的整个网站,解决这个问题:像这样的一些东西将在SQL Server数据的方法。 并使用它,我流这门课程:

​​

+1

你会发现这篇文章有用[链接](http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql-injection) –

+0

这与无关一个正则表达式。看看这个问题有更多的事情要考虑:http://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site – Jacco

+0

也许我是缺少一些VB特有的功能,但是当你在'closeCon()'之前返回'时,我认为连接并不真正关闭! –

回答

5

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

从技术上讲,这是因为它会在内部处理您的查询目前缺乏的所有参数sanatization,但这并不是说您无法使用您已有的代码解决您的问题。您只需更新查询即可使用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)) 
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,并将它们传递给命令。显然,解决方案需要比我提供的更通用,但希望这会让你开始。