2012-01-31 37 views
9

MVCを使用して初めて開発したので、安全にしたいです。MVCでSQLインジェクションを制御

私はHtmlEncodeを使用すると、文字列を同等のHTML文字列に変換します。

ユーザーはaliの検索に「ali」または「ali」と入力することができ、それらはデータベースに存在します。 SQLインジェクションから検索とログインを制御するにはどうすればいいですか?

また、スクリプトの挿入を防ぐためのチュートリアルやベストプラクティスはありますか?

+0

データベースにはどのようにアクセスしますか? LINQ?エンティティフレームワーク? –

+0

私はLINQまたはEntityフレームワークを好む通常のものを使用します – AMH

+1

この[SOのリンク](http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql)をご覧ください...両方ともあなたのためのSQLインジェクションをチェックします.... –

答えて

15

LINQとEntity Frameworkは既にSQLインジェクションをチェックしています。

しかし、あなたがとにかく文書をお読みください:

LINQ MSDN Link(セクションのSQLインジェクション攻撃を)

Entity FrameworkのMSDN Link(クエリのためのセクションのセキュリティの考慮事項)

はそれが役に立てば幸い!

+0

スクリプトの注入について – AMH

+0

@AMH私はそれが別の質問であるべきだと考えていますが、このリンクは参考になります:[asp tutorials](http://www.asp.net/mvc/tutorials/older-versions/security/prevent-javascript-injection-attacks-cs) –

+0

LINQまたはEFをご希望の方 – AMH

4

LINQを使用してデータベースクエリを実行すると、そのような種類のSQLインジェクションリスクが排除されます。

+0

ROMデータベースをサポートしてくれてありがとうございます。スクリプトの注入はどうですか – AMH

7

パラメータ化クエリまたはNHibernateやEntity FrameworkのようなORMを使用する限り、SQLインジェクションを防ぐために何もする必要はありません。パラメータは、サーバーへのRPC呼び出しの一環として、実際のSQLステートメントの外部でサーバーに渡されます。ほとんどのORMは、パフォーマンス理由のためにパラメータ化されたクエリを使用するため、SQLインジェクションに対して脆弱ではありません。

SQL注入は、文字列値を連結してSQL文を作成する場合にのみ可能です。

つまり、スクリプトインジェクション攻撃を防ぐためには、ユーザー入力に注意する必要があります。幸運なことに、ASP.NET MVCは既に要求検証メカニズムを提供しています(Understanding Request Validationを参照)。

+0

しかし、私はパラメータを渡すことによって私が知っているデータベースをドロップするのに疲れました – AMH

+0

パラメータに何を渡しても(パラメータによって、SqlParameter(http://msdn.microsoft.com/en-us/library/system.data.common.dbparameter.aspx)のようなDbParameterから派生したオブジェクトが作成されます)、単純な文字列としてサーバーに渡されます。実行されることはありません。 ストアド値を使用してアプリケーションの他の部分で文字列連結によるSQL文を作成すると、問題が発生する可能性があります。 –

関連する問題