Paramétrage sécurisé de la clause IN dans Android SQL
Travailler avec des données dynamiques dans la clause SQL IN
d'Android nécessite une manipulation minutieuse pour éviter les vulnérabilités d'injection SQL. Ce guide présente une méthode sécurisée utilisant des espaces réservés.
Utiliser des espaces réservés pour la sécurité
L'approche la plus sûre consiste à créer une chaîne d'espace réservé avec des virgules séparant les points d'interrogation. Le nombre d'espaces réservés correspond directement au nombre de valeurs dans votre clause IN
. Cette chaîne est ensuite intégrée à votre requête SQL, protégeant ainsi vos données des attaques par injection.
Exemple pratique
Supposons que vous ayez une fonction makePlaceholders(int len)
qui génère cette chaîne d'espace réservé. Cette fonction garantit une chaîne de points d'interrogation correctement formatée, quel que soit le nombre de valeurs. Voici comment il est utilisé :
<code class="language-java">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")"; Cursor cursor = mDb.rawQuery(query, names);</code>
makePlaceholders
Implémentation des fonctions
Une implémentation possible de la fonction makePlaceholders
est :
<code class="language-java">String makePlaceholders(int len){ if (len < 1) { throw new IllegalArgumentException("Length must be at least 1"); } else if (len == 1) { return "?"; } else { StringBuilder sb = new StringBuilder(len * 2).append("?"); for (int i = 1; i < len; i++) { sb.append(",?"); } return sb.toString(); } }</code>
Cela garantit le nombre correct d'espaces réservés et évite les erreurs dans les cas extrêmes (valeur unique). L'utilisation de cette méthode fournit un moyen flexible et sécurisé de gérer les données dynamiques dans votre clause IN
, en vous protégeant contre l'injection SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!