SQL インジェクションの防止¶
SQL インジェクション攻撃は、クライアントアプリケーションで入力値として不正な SQL クエリを挿入することによって実行されます。
Virtual DataPort に対するこのタイプの攻撃を防止するためのガイドラインは、以下のとおりです。
Denodo JDBC ドライバーを使用するクライアントアプリケーションで、Virtual DataPort に送信するクエリに注入された SQL クエリが含まれないようにします。そのためには、この問題を回避するための JDBC API のベストプラクティスに従います。具体的に言うと、すべてのクエリを、パラメータを指定した準備済みステートメント (
SELECT id, name FROM view WHERE field = ?
など) を使用して生成します。JDBC API のメソッドを使用してパラメータの値を設定することにより、Virtual DataPort に送信されるクエリに悪意のあるクエリを挿入できないようにします。
補間変数を使用する SQL クエリ (
SELECT... FROM ... WHERE field = @INPUT
など) から構築した JDBC 基本ビューが存在する場合に、以下の条件のどちらかを満たすと、SQL インジェクションを受ける危険があります。少なくとも 1 つの補間変数が一重引用符で囲まれていない。
または、ビューの作成時に、補間変数に関連付けられている少なくとも 1 つのフィールドが「SQL フラグメント」としてマークされている。基本ビューの
CREATE WRAPPER JDBC
ステートメントでフィールドにSQLFRAGMENT
修飾子が存在する場合、そのフィールドは SQL フラグメントと解釈されます。
この場合、SQL インジェクションを防止するには、外部クライアントが使用するビューが、それらの補間変数に関連付けられているフィールドを投影しないことを確認します。