2009-07-12 9 views
1

私はVB.Netで一連のWebサービスを構築しています。ストアドプロシージャを呼び出すWebサービスにはどの程度の消毒が必要ですか?

各Webサービスは複数の文字列値を取り、いくつかの検証/処理を行い、Linq to SQLを使ってストアドプロシージャを呼び出します。文字列の中には、データベースに格納されているユーザーデータが含まれています。

Webサービスから渡されたこれらの文字列値は、一重引用符、セミコロン、およびさまざまな括弧の種類をトラップするためにエスケープされます。

私はdatacontext.spname(parameter1、parameter2)メソッドを使用してSPを呼び出しています。

目的は、パフォーマンスがまだ高いうちに、できるだけ復元力があることを保証することです。

SQLインジェクション攻撃を防止するのに十分なのですか?

答えて

3

通常、あなたは良いですが、いくつか注意点があります。sp_executesqlをまたはEXECを使用して保存されてprocsの

  • は慎重に。 paramでクエリを渡して、それを実行することができます。

  • クエリのLIKEセクションが慎重であるため、パラメタにたとえれば%で拡げることができます。

  • ウェブページで使用されるフィールドは、クロスサイトスクリプティングを避けるために、送信前にいくつかの処理が必要になる場合があります。 SQLインジェクションからあなたが安全に保つ - 私はSQLにLINQは、すべてのデータがSQLパラメータを介してデータベースに送信問い合わせるという事実を知って

1

を(あなたはまた、情報を引き出すときから身を守る必要があります)。私は完全にはわかりませんが、LINQはストアドプロシージャを抽象化するので、同じ方法でストアドプロシージャに引数を渡す可能性が最も高いです。

これはどういう意味ですか? LINQがデータを処理するので、データの消毒について心配する必要はありません。もちろん、単純なSQLインジェクションタイプの攻撃(無害な挿入や選択など)でテストすることもできます。

0

パラメータを使用している場合は、一重引用符で完全にサニタイズする必要はなく、他のSQLインジェストネストはエスケープされます。

保存しているデータによっては、入力時にサニタイズするのは悪い考えです。ウェブページに埋め込まれたものを保存していて、データ入力時にエンコード/サニタイズすると、衛生コードにバグがあるとどうなりますか?あなたは、出力に問題を引き起こし、すべてのデータを更新せずに簡単に修正することができないデータベース内のデータになります。サニタリーコードの修正がすべてのデータに対して実行されるため、データを出力するときにサニタイズする方が良いでしょう。また、SQLでの検索が簡単であるという利点があります。

私はWebサービスを明白なもの、nullと範囲チェックに限定します。

関連する問題