2012-01-31 9 views
1

当社の製品の「API」を開発中です。これにより、ユーザーは「問合せ」から戻らない列を定義できるようになり、必要なSQLを構築します。動的に生成されたSQLセキュリティの懸念(SQLインジェクションなど)

SQLインジェクション攻撃を避けるために、常にパラメータ化されたクエリを使用する必要があることは知っています。しかし、返される列がユーザーによって定義されているステートメントを作成するときに、セキュリティ上のリスクはありますか?私たちは次のAPIリクエストを持っているとします。これは私が何を意味するか説明するためだけの例です:)

/api/customers/getall?fields=Name,Phone,Email&where=Zip=1000 

SQLが

SELECT Name, Phone, Email FROM Customers WHERE Zip = @Zip 

私はそれは、単にフィールドのパラメータを取り、その周りに直接SQLを構築することを考えていないよとなりますおそらくリストになり、IdやModifiedのようないくつかのデフォルトの列が返されます。

この場合、どのようなことに注意してください。そして、攻撃からどのように保護しますか?

- クリスチャン

答えて

0

これは、あなたが入力刺さをチェックしてみましょうし、あなたが安全側にする必要がありますストアドプロシージャ

を作成します。

参照: MSDN Create Stored Procedures

+0

ストアドプロシージャはオプションではありません。このAPI専用のデータベースを変更する必要はありません。 返される一連の列を指定して、適切なSQLを動的に生成するSPを作成するにはどうすればよいでしょうか? –

0

まず、私はINFORMATION_SCHEMA.COLUMNSメタデータテーブルから選択したテーブル(複数可)のフィールドを取得するためにクエリを実行します。

Querying database metadata

データベースから引き出された列名が使用しても安全です。次に、SELECT句のフィールドを「安全なフィールドリスト」と比較しました。選択したフィールドの1つがクリーンリストにない場合は、それを削除するか、生成されたSQLをまったく実行しないでください。

関連する問題