Heim > Datenbank > MySQL-Tutorial > Wie kann ich die IN-Klausel in Android-SQL-Abfragen sicher parametrisieren?

Wie kann ich die IN-Klausel in Android-SQL-Abfragen sicher parametrisieren?

Barbara Streisand
Freigeben: 2025-01-18 17:32:09
Original
500 Leute haben es durchsucht

How to Safely Parameterize the IN Clause in Android SQL Queries?

IN-Klausel und Platzhalter-Rätsel in Android-SQL-Abfragen

In Android erfordert die Ausführung von SQL-Abfragen häufig die Verwendung parametrisierter Platzhalter, um SQL-Injection-Schwachstellen zu verhindern. Dies tritt auf, wenn eine IN-Klausel verwendet wird. Betrachten Sie die folgende Abfrage:

<code>String names = "name1', 'name2";   // 动态生成
String query = "SELECT * FROM table WHERE name IN (?)";
Cursor cursor = mDb.rawQuery(query, new String[]{names});</code>
Nach dem Login kopieren

Android kann das Fragezeichen jedoch nicht durch den angegebenen Wert ersetzen. Alternativ können Sie wählen:

<code>String query = "SELECT * FROM table WHERE name IN (" + names + ")";
Cursor cursor = mDb.rawQuery(query, null);</code>
Nach dem Login kopieren

Während dieser Ansatz die Bedrohung durch SQL-Injection beseitigt, gelingt es ihm nicht, die Abfrage richtig zu parametrisieren.

Parametrierte IN-Klausel

Um eine Parametrisierung zu erreichen und gleichzeitig das Risiko einer Injektion zu vermeiden, sollten Sie die Verwendung von Zeichenfolgen mit Platzhaltermustern in Betracht ziehen:

<code>String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";
Cursor cursor = mDb.rawQuery(query, names);</code>
Nach dem Login kopieren
Die Funktion

makePlaceholders(len) generiert eine Zeichenfolge mit der erforderlichen Anzahl von Fragezeichen, getrennt durch Kommas. Dadurch können Abfragen sicher eingefügt werden, ohne die Parametrisierung zu beeinträchtigen.

Implementierung von makePlaceholders(len):

<code>String makePlaceholders(int len) {
    if (len < 1) {
        throw new IllegalArgumentException("Length must be > 0");
    }
    StringBuilder sb = new StringBuilder(len * 2 - 1);
    sb.append("?");
    for (int i = 1; i < len; i++) {
        sb.append(",?");
    }
    return sb.toString();
}</code>
Nach dem Login kopieren

Bitte beachten Sie, dass SQLite im Allgemeinen bis zu 999 Hostparameter unterstützt, außer in einigen bestimmten Android-Versionen.

Das obige ist der detaillierte Inhalt vonWie kann ich die IN-Klausel in Android-SQL-Abfragen sicher parametrisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage