LINQのExecuteCommandは、SQLインジェクション攻撃からの保護を提供しますか?
-
03-07-2019 - |
質問
挿入を実行するためにLINQのExecuteCommandメソッドを使用する必要がある状況があります。
次のようなもの(この質問の目的のために簡略化されています):
object[] oParams = { Guid.NewGuid(), rec.WebMethodID };
TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);
問題は、これがパラメーター化されたクエリと同じ方法でSQLインジェクションの証拠であるかどうかです
解決
調査を行ったところ、次のことがわかりました:
簡単なテストでは、次のようになります に渡されるパラメーター 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エスケープ」よりもよく知っています。何でも;代わりに実際のクエリパラメータを使用します。
他のヒント
LINQ to SQLは、パラメーターを使用して exec_sql を使用します。これは、アドホッククエリ文字列に連結するよりもはるかに安全です。 SQLインジェクションに対して、SqlCommandとそのParamatersコレクションを使用するのと同じくらい安全である必要があります(実際、おそらくLINQ to SQLが内部的に使用するものです)。それでは、それはどのくらい安全ですか?