Sichern Sie Ihre Android SQL IN-Klausel
Das Verhindern von SQL-Injection ist beim Erstellen von SQL-Abfragen von größter Bedeutung, insbesondere bei solchen, die die IN
-Klausel verwenden. Während die rawQuery
-Methode von Android Platzhalter (?) verwendet, stellt das direkte Ersetzen dieser durch vom Benutzer bereitgestellte Daten ein erhebliches Sicherheitsrisiko dar.
Eine robuste Lösung beinhaltet die Parametrisierung der IN
-Klausel. Dieser Ansatz verwendet eine generierte Platzhalterzeichenfolge und vermeidet so die direkte Einbeziehung von Benutzereingaben in die SQL-Abfrage selbst.
Der sichere Ansatz:
Platzhalter generieren: Erstellen Sie eine Zeichenfolge mit der richtigen Anzahl an Platzhaltern (?). Eine Hilfsfunktion wie makePlaceholders(int len)
generiert eine durch Kommas getrennte Zeichenfolge von len
-Fragezeichen. Diese Funktion stellt sicher, dass die Platzhalterzeichenfolge konsistent formatiert und frei von vom Benutzer bereitgestellten Daten ist.
Konstruieren Sie die Abfrage: Integrieren Sie die generierte Platzhalterzeichenfolge in Ihre SQL-Abfrage:
<code class="language-sql">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
Vorbereiten und binden: Bereiten Sie die Abfrage vor und binden Sie die dynamischen Werte als Array:
<code class="language-java">Cursor cursor = mDb.rawQuery(query, names);</code>
Entscheidend ist, dass die Anzahl der Werte im names
-Array genau mit der Anzahl der generierten Platzhalter übereinstimmt.
Codebeispiel:
Hier ist eine Beispielimplementierung der Funktion 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>
Diese Methode erstellt die Platzhalterzeichenfolge dynamisch und gewährleistet so eine sichere Abfrageausführung. Durch die Verwendung parametrisierter Abfragen verringern Sie wirksam SQL-Injection-Schwachstellen und schützen Ihre Android-Datenbank.
Das obige ist der detaillierte Inhalt vonWie parametrisiert man die SQL IN-Klausel in Android sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!