ホームページ > データベース > mysql チュートリアル > Android で SQL IN 句を安全にパラメータ化する方法

Android で SQL IN 句を安全にパラメータ化する方法

Barbara Streisand
リリース: 2025-01-18 17:21:11
オリジナル
505 人が閲覧しました

How to Securely Parametrize the SQL IN Clause in Android?

Android SQL IN 句の保護

SQL インジェクションを防ぐことは、SQL クエリ、特に IN 句を使用するクエリを構築する場合に最も重要です。 Android の rawQuery メソッドはプレースホルダー (?) を使用しますが、それをユーザーが提供したデータに直接置き換えることは重大なセキュリティ リスクです。

堅牢な解決策には、IN 句のパラメータ化が含まれます。 このアプローチでは、生成されたプレースホルダー文字列を使用し、SQL クエリ自体にユーザー入力が直接組み込まれることを回避します。

安全なアプローチ:

  1. プレースホルダーの生成: 正しい数のプレースホルダー (?) を含む文字列を作成します。 makePlaceholders(int len) のようなヘルパー関数は、len 疑問符のカンマ区切り文字列を生成します。この関数により、プレースホルダー文字列が一貫してフォーマットされ、ユーザー指定のデータが含まれないことが保証されます。

  2. クエリを構築します: 生成されたプレースホルダー文字列を SQL クエリに統合します:

    <code class="language-sql">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
    ログイン後にコピー
  3. 準備とバインド: クエリを準備し、動的値を配列としてバインドします:

    <code class="language-java">Cursor cursor = mDb.rawQuery(query, names);</code>
    ログイン後にコピー

    重要なことは、names 配列内の値の数は、生成されたプレースホルダーの数と正確に一致する必要があります。

コード例:

makePlaceholders 関数の実装例を次に示します。

<code class="language-java">public static String makePlaceholders(int len) {
    StringBuilder sb = new StringBuilder(len * 2 - 1);
    sb.append("?");
    for (int i = 1; i < len; i++) {
        sb.append(",?");
    }
    return sb.toString();
}</code>
ログイン後にコピー

このメソッドはプレースホルダー文字列を動的に構築し、安全なクエリ実行を保証します。 パラメータ化されたクエリを使用すると、SQL インジェクションの脆弱性を効果的に軽減し、Android データベースを保護できます。

以上がAndroid で SQL IN 句を安全にパラメータ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート