ホームページ >データベース >mysql チュートリアル >SQL インジェクションを防ぐために Android SQL クエリの IN 句を安全にパラメータ化するにはどうすればよいですか?

SQL インジェクションを防ぐために Android SQL クエリの IN 句を安全にパラメータ化するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-18 17:11:13800ブラウズ

How Can I Securely Parametrize IN Clauses in Android SQL Queries to Prevent SQL Injection?

安全なパラメータ化された IN 句

Android 開発では、SQL クエリに動的パラメーターを使用した IN 句が含まれるのが一般的です。ただし、パラメーターをクエリに直接置き換えると、セキュリティが侵害され、SQL インジェクションの脆弱性が発生する可能性があります。

チャレンジ

課題は、データの整合性を損なうことなく、IN 句を安全にパラメータ化することです。パラメータ値を手動でクエリに連結することは安全ではなく、悪意のある SQL コマンドの誤った実行を防ぐというパラメータ バインディングの目的を損なうことになります。

解決策: 動的な疑問符

安全な解決策には、疑問符のカンマ区切り文字列を動的に生成することが含まれます。この文字列は元の SQL クエリに直接埋め込むことができ、プレースホルダーの数が指定されたパラメーターの数と確実に一致するようにします。仕組みは次のとおりです:

  1. プレースホルダー ジェネレーターを作成します: 必要な数のプレースホルダーを受け入れ、その数の疑問符 (カンマで区切られた) を含む文字列を返す関数 makePlaceholders(int len) を実装します。

  2. パラメータ化されたクエリの構築: 生成された IN 句の疑問符文字列を使用して SQL クエリを作成します:

    <code>String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
  3. パラメータを指定して実行: 最後に、パラメーター バインディング メソッドを使用してクエリが実行され、適切な値がパラメーターとして提供されます。

実装例

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

<code class="language-java">String makePlaceholders(int len) {
    if (len < 1) {
        throw new IllegalArgumentException("Length must be at least 1");
    }
    StringBuilder sb = new StringBuilder(len * 2 - 1);
    sb.append("?");
    for (int i = 1; i < len; i++) {
        sb.append(",?");
    }
    return sb.toString();
}</code>

この手法を使用すると、IN 句を安全にパラメータ化できるため、SQL インジェクションのリスクが軽減され、データベース操作の整合性が確保されます。

以上がSQL インジェクションを防ぐために Android SQL クエリの IN 句を安全にパラメータ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。