1

SQLServerのストアドプロシージャを.edmxファイルにインポートしました。生成されたメソッドを次のように呼び出しています。

entity.MySP(stringInput)

EFを使用する場合、パラメーターを検証する必要がありますかstringInput(SQLインジェクションなど)、またはEFが検証することを想定できますか?そうでない場合、入力パラメーターをエスケープ/検証するために呼び出すことができるメソッドはありますか?

SQL Server 2008 R2、.NET 4.0、C#、ASP.NET MVC 4、VS2010を使用しています。

編集:SPを呼び出す代わりにLINQを使用したいのですが、FREETEXTを使用しているので、これがより洗練されたソリューションだと思います。

4

2 に答える 2

1

LINQ to Entity Framework Securityの詳細については、http://msdn.microsoft.com/en-us/library/cc716760.aspxを参照してください。「クエリのセキュリティに関する考慮事項」というタイトルのセクションをご覧ください。

質問に具体的に答えるために、Entity Frameworkはストアドプロシージャを呼び出し、stringInput値を渡します。つまり、stringInputがデータベースに有害なものを挿入することを目的としたSQLステートメントであっても、それをストアドプロシージャに渡すだけでは、SQLインジェクション攻撃は発生しません。

ただし、ストアドプロシージャでstringInputをどのように使用するかによっては、攻撃を受けやすいままになる可能性があります。具体的には、実行する動的SQLステートメントでstringInputを使用すると、攻撃を受けやすくなります。これを使用してSELECTステートメントのWHEREセクションで比較を行う場合は、安全である必要があります。

于 2012-10-05T13:38:58.953 に答える
1

それは、ストアド プロシージャ内で何をしているかに大きく依存します。ストアド プロシージャを使用するだけでは、SQL インジェクションの影響を受けません。逆に、LINQ to Entity コードで変数を使用すると、そこでもクエリが正しくパラメーター化されるため、SQL インジェクションから保護されます。残念ながら、Entity Framework ではフルテキスト インデックス作成はサポートされていないため、パフォーマンス上の懸念からそれらを使用するには、procs または functions に頼る必要があります。ただし、LINQ で生成されたクエリよりも必ずしも「エレガント」であるとは言えません。

于 2012-10-05T13:34:20.360 に答える