1

VB.Net で一連の Web サービスを構築しています。

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

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

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

その目的は、パフォーマンスを維持しながら、Web サービスの回復力を可能な限り高めることです。

SQL インジェクション攻撃を防ぐために十分な対策を講じていますか?

4

3 に答える 3

3

通常は問題ありませんが、いくつかの注意事項があります。

  • sp_executesql または exec を使用するストアド プロシージャには注意してください。param にクエリを渡して、最終的に実行することができます。

  • クエリの LIKE セクションには注意してください。これは、パラメーターに例えると % で拡張できるためです。

  • Web ページで使用されるフィールドは、クロス サイト スクリプティングを回避するために、送信される前に追加の処理が必要になる場合があります。(情報を引き出すときにも防御する必要があります)

于 2009-07-12T14:44:07.540 に答える
1

LINQ to SQL は、SQL パラメーターを介してデータベースに送信されるすべてのデータを照会するという事実を知っています。これにより、SQL インジェクションから安全に保つことができます。完全にはわかりませんが、LINQ はストアド プロシージャを抽象化するため、おそらく同じ方法でストアド プロシージャに引数を渡します。

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

于 2009-07-12T14:53:18.473 に答える
0

パラメータを使用している場合は、一重引用符を使用してサニタイズする必要はまったくなく、他の SQL インジェクションの問題はエスケープされます。

保存しているデータによっては、入力時にサニタイズするのはおそらく悪い考えです。Web ページに埋め込まれてしまうものを保存していて、データ入力時にそれらをエンコード/サニタイズする場合、サニテーション コードにバグがあるとどうなりますか? データベース内のデータが出力に問題を引き起こし、すべてのデータを更新しないと簡単に修正することができなくなります。衛生コードの修正がすべてのデータに対して実行されるため、データを出力するときにサニタイズすることをお勧めします。また、問題が発生した場合に備えて、SQL で簡単に検索できるという利点もあります。

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

于 2009-07-12T15:05:04.753 に答える