2012-10-30 25 views
4

我已經在我的搜索看到使用SQL查詢參數字符串如下形成的:參數字符串和LIKE和通配符

SqlCommand comm = new SqlCommand(); 
comm.CommandText="SELECT * FROM table WHERE field LIKE '%'[email protected]+'%'"; 
comm.Parameters.AddWithValue("var","variabletext"); 
SqlDataReader reader = comm.ExecuteReader(); 

然而,在這個論壇中提到,受到SQL注入儘管它被用於參數化字符串中。我只能假設連接字符串繞過了所有參數化的安全性,並直接將該值作爲字符串插入。如果是這樣的話,在避免SQL代碼注入的同時,如何在參數化查詢中使用通配符運算符?

回答

3

這是容易受到SQL注入。

誰告訴你這是錯的。 '%'[email protected]+'%'被視爲數據而不是可執行代碼。它被評估爲一個字符串,然後用作LIKE右側的模式。

如果您是EXEC這樣的連接的結果,您將只有一個問題。簡單地在查詢中執行字符串連接並不是問題。

+0

-1您應該檢查所有關於sql注入問題的異常。看看這裏:http://stackoverflow.com/questions/1429866/examples-of-sql-injection-even-when-using-sqlparameter-in-net – Rikki

+1

@MohammadGoudarzi - 你錯了。這裏沒有SQL注入問題。 OP已經在使用參數化查詢。它們恰好將某些參數連接起來。他們不是通過串聯創建可執行字符串。 –

+0

@MohammadGoudarzi我相信馬丁是對的。我添加了一個編輯,使我的使用更清晰。 – steventnorris

2

您應該使用"SqlParameter"將值發送到存儲過程進行搜索。 "SqlParameter"的目的是拒絕值中的所有注入事物。此外,如果您必須執行包含sql代碼的文本或者對參數進行連接,則應該再次將該命令的"CommandType"屬性設置爲"Text",並使用"SqlParameter"將您的值發送到該文本。

檢查這個微軟單證這裏:

http://msdn.microsoft.com/en-us/library/ff648339.aspx

,並另一個在這裏計算器問題:

How does SQLParameter prevent SQL Injection?

也看看這裏,看看一些具體的例子:

Examples of SQL injection even when using SQLParameter in .NET?

更新:

正如你已經更新的問題,現在正好指定不存在SQL注入問題了你提到的代碼執行的方式。

乾杯

+0

我試過已經是男人,它已被鎖定,直到你編輯答案。我會做的!諾言。 ;)乾杯 – Rikki

+0

你應該先編輯答案!我無法撤消它,它已被鎖定。 – Rikki

+1

我做到了。 :D總是C#,,,乾杯 – Rikki