2012-05-12 17 views
9

このクエリは、Dapperとの組み合わせでSQLインジェクションに対して安全ですか? もしそうでなければ、MySqlの下でそれを書く正しい方法は何でしょうか? または、コンカットを使用しないとより良いバージョンがありますか?大量のMySQLのLIKEクエリはSql Injectionに対して安全ですか?

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

答えて

4

あなたはすべてので動的SQLを構築されていないので、これは安全です。名前は単なる通常のパラメータです。実際、Dapperとは何の関係もありません。

ここで文字列コンカットを使用するのが正しい選択です。あるいは、SUBSTRING_INDEX機能を使用することもできます。

15

は、そのコードに問題がないが、別の手法、すなわち

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

これは動作しますが、パターンの構造に関する以下の情報をサーバに提供し、発信者で連結を行うことです。これが部分文字列検索で重要かどうかは不明ですが、starts-with検索では間違いありません。 – usr

+0

@usrそれをプロファイルするのは興味深いでしょう。他のRDBMSに悪影響を与えることはありません。 –

+0

お返事いただきありがとうございます。 – Epstone

関連する問題