2

C プログラムで Gnome Data Access (libgda) を使用してデータベースにアクセスしています。GdaSqlBuilder を使用してクエリを作成します。リクエストのフィールドに等しい条件を追加するコードの例を次に示します。

GdaSqlBuilderId add_equal_condition(char* m_name, GValue* m_value)
{
    GdaSqlBuilderId name, value, condition;
    name = gda_sql_builder_add_id(builder, m_name);
    value = gda_sql_builder_add_expr_value(builder, NULL, m_value);
    condition = gda_sql_builder_add_cond(builder, GDA_SQL_OPERATOR_TYPE_EQUAL, name, value, 0);
    return condition;
}

libgda は SQL インジェクションから自身を保護しますか、それとも入力を GDA に渡す前に自分でサニタイズする必要がありますか?

ご回答ありがとうございます。

4

2 に答える 2

0

これについては、序文で次のように説明されています。

値 (リテラル) を含む SQL 文字列を作成する場合、(最も簡単な解決策であるため) 値自体を含む文字列を作成し、そのステートメントを実行して、次に同じステートメントを実行する必要があるときに同じプロセスを適用したくなることがあります。異なる値で実行されます。このアプローチには、以下に概説する 2 つの大きな欠陥があります。そのため、Libgda は、ステートメントで変数 (パラメーターまたはプレースホルダーとも呼ばれます) を使用し、変数の値のみが変更されたときに同じ GdaStatement オブジェクトを再利用することを推奨しています。

https://developer.gnome.org/libgda/unstable/ch06s03.html

于 2013-03-11T14:26:28.253 に答える
-1

現在のバージョンが脆弱ではない場合でも、それはすべての将来のバージョンが脆弱ではないという意味ではありません。例外なく、ユーザーが提供するものには常に注意を払う必要があります。

あらゆる種類の他のシステムのインターフェースについても同じことが言えます。これはSQLiに限定されるものではなく、SQLiや使用するライブラリの問題でもありません。ユーザーは、入力したい種類のデータのみを入力するか、そうでない場合は拒否することができます。他のコードに頼ってそれを行うことはできません。

一般的に:特定の種類の攻撃から完全に保護できるものはありません。これは、執筆時点で既知の攻撃ベクトルに常に制限されます。

于 2013-03-11T14:21:06.337 に答える