2013-01-23 198 views
0

我是一個新的編碼的世界,防止SQL注入ASP .NET

我建了一個大型網站有幾個文本框,所以我現在弄清楚,我一直在使用以危險方法像這樣的一些東西將在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 
     closeCon() 
    End Function 

我只是想知道,如果在我的整個網站來解決這個問題的任何快捷方式。

+2

使用**參數化查詢**,請參閱http://stackoverflow.com/questions/542510/how-do-i-create-a-parameterized-sql-query-why-should-i – mattytommo

+0

對不起諷刺,但恐怕最快的方法是開始_typing更快_...這需要一些時間來解決。 – ppeterka

回答

1

使用LINQ to SQL可以幫助防止SQL注入攻擊通過參數爲您提供:

的LINQ to SQL通過SQL參數傳遞所有的數據到數據庫。因此,雖然SQL查詢是動態組合的,但這些值是通過參數來替代服務器端的,以防止SQL注入攻擊的最常見原因。

閱讀更多關於它here

4

我贊同你想從你的網站中刪除任何SQL注入的可能性的事實。

也就是說,沒有快速,神奇的「發現和替換我的弱點代碼」功能;您需要進入您的系統並使用parameterized queries更新任何類似的呼叫。

2

需要參數化查詢來防止SQL注入。這裏有一個例子,從這個問題採取:How do I create a parameterized SQL query? Why Should I?

Public Function GetBarFooByBaz(ByVal Baz As String) As String 
    Dim sql As String = "SELECT foo FROM bar WHERE baz= @Baz" 

    Using cn As New SqlConnection("Your connection string here"), _ 
     cmd As New SqlCommand(sql, cn) 

     cmd.Parameters.Add("@Baz", SqlDbTypes.VarChar, 50).Value = Baz 
     Return cmd.ExecuteScalar().ToString() 
    End Using 
End Function