2012-05-12 72 views
9

此查詢是否安全地針對與Dapper結合的SQL注入? 如果沒有,那麼在MySql下編寫它的正確方法是什麼? 還是有更好的版本,而不使用concat?Dapper LIKE查詢MySql安全的Sql注入?

string sql = "SELECT * from user_profile WHERE FirstName LIKE CONCAT("%",@name,"%");" 
var result = connection.query<profile>(sql, new {name}); 

回答

4

這是安全因爲你不是在所有構建SQL動態。名字只是一個普通的參數。事實上,它與Dapper無關。

在這裏使用字符串concat是正確的選擇。或者,您可以使用SUBSTRING_INDEX函數。

15

沒有與該代碼的問題,但另一個方法是在調用者執行的concat,則即

const string sql = "SELECT * from user_profile WHERE FirstName LIKE @name;"; 
var result = connection.Query<Profile>(sql, new {name = "%"+name+"%"}); 
+1

這工作,但提供服務器提供關於圖案的結構更少的信息。不確定這是否對子字符串搜索很重要,但它肯定會用於開始搜索。 – usr

+0

@usr這將是有趣的。它不會以負面的方式影響其他RDBMS。 –

+0

謝謝你的答案! – Epstone