Sécuriser votre clause SQL IN Android
Empêcher l'injection SQL est primordial lors de la création de requêtes SQL, en particulier celles utilisant la clause IN
. Bien que la méthode rawQuery
d'Android utilise des espaces réservés (?), leur remplacement direct par des données fournies par l'utilisateur constitue un risque de sécurité important.
Une solution robuste consiste à paramétrer la clause IN
. Cette approche utilise une chaîne d'espace réservé générée, évitant l'inclusion directe des entrées de l'utilisateur dans la requête SQL elle-même.
L'approche sécuritaire :
Générer des espaces réservés : Créez une chaîne contenant le nombre correct d'espaces réservés (?). Une fonction d'assistance telle que makePlaceholders(int len)
génère une chaîne de points d'interrogation len
séparés par des virgules. Cette fonction garantit que la chaîne d'espace réservé est formatée de manière cohérente et exempte de données fournies par l'utilisateur.
Construisez la requête : Intégrez la chaîne d'espace réservé générée dans votre requête SQL :
<code class="language-sql">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
Préparer et lier : Préparez la requête et liez les valeurs dynamiques sous forme de tableau :
<code class="language-java">Cursor cursor = mDb.rawQuery(query, names);</code>
Essentiellement, le nombre de valeurs dans le tableau names
doit correspondre précisément au nombre d'espaces réservés générés.
Exemple de code :
Voici un exemple d'implémentation de la fonction 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>
Cette méthode construit dynamiquement la chaîne d'espace réservé, garantissant une exécution sécurisée des requêtes. En utilisant des requêtes paramétrées, vous atténuez efficacement les vulnérabilités d'injection SQL et protégez votre base de données Android.
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!