ASPX と SQL Server を利用した Web アプリを実行していますが、複数のステートメントの実行を無効にしたいと考えています。select 1,2,3; select 1,2,3
では、その機能を無効にすることはできますか、それとも機能させるために接続文字列を変更する必要がありますか?
ASPX と SQL Server を利用した Web アプリを実行していますが、複数のステートメントの実行を無効にしたいと考えています。select 1,2,3; select 1,2,3
では、その機能を無効にすることはできますか、それとも機能させるために接続文字列を変更する必要がありますか?
Microsoft SQL Server には、バッチごとのステートメント数を制限するオプションがありません。
一部の SQL インジェクション攻撃は、追加のステートメントをバッチに挿入することに依存していますが、その他の攻撃は、手元にあるステートメントを有利に変更しようとします。このアイデアを実装することで、最初のタイプを防ぐことができます。ただし、2 番目のタイプはできません。
SQL インジェクションの標準的な例は、ログイン クエリです。
SELECT * FROM dbo.users WHERE user_name = '?' and password = '?';
手動のパラメーター置換を使用し、攻撃者のタイプを使用する場合
admin';--
ユーザー名と任意のパスワードとして、アプリは、実際の管理者が正しいパスワードを入力した場合と同じ応答をデータベースから取得します。
この攻撃では、バッチにはまだ単一のステートメントしか含まれていないため、あなたの「トリック」ではそれを防ぐことはできませんでした。
一般的には、注射は最初から控えたほうがよいでしょう。ユーザー入力を使用してあらゆる種類の動的ステートメント (SQL ステートメントだけでなく) を作成する前に、必ずすべてのユーザー入力を確認してください。
SQL では、準備済みステートメントまたはストアド プロシージャを使用し、API 機能を使用してパラメーター値を置き換えます。
アンチ インジェクション パターンの出発点として、次の Technet 記事を参考にしてください。