16

挿入を実行するためにLINQのExecuteCommandメソッドを使用する必要がある状況があります。

次のようなもの(この質問の目的のために簡略化されています):

object[] oParams = { Guid.NewGuid(), rec.WebMethodID };

TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);

問題は、これがパラメータ化されたクエリと同じようにSQLインジェクションの証拠であるかどうかです。

4

2 に答える 2

14

いくつかの調査を行ったところ、次のことがわかりました。

私の簡単なテストでは、ExecuteQuery メソッドと ExecuteCommand メソッドで渡されたパラメーターは、指定された値に基づいて自動的に SQL エンコードされるようです。したがって、' 文字を含む文字列を渡すと、自動的に SQL エスケープされて '' になります。DateTimes、Decimals などの他のデータ型にも同様のポリシーが使用されていると思います。

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(下にスクロールして見つけます)

これは私には少し奇妙に思えます。他のほとんどの .Net ツールは、何かを "SQL エスケープ" するよりもよく知っています。代わりに実際のクエリ パラメータを使用します。

于 2008-10-01T14:38:59.327 に答える
0

LINQ to SQLは、パラメータでexec_sqlを使用します。これは、アドホッククエリ文字列に連結するよりもはるかに安全です。SqlCommandとそのParamatersコレクションを使用するのと同じくらいSQLインジェクションに対して安全である必要があります(実際、これはおそらくLINQ to SQLが内部で使用するものです)。それではまた、それはどれほど安全です

于 2008-10-01T21:08:22.400 に答える