Sicherer Umgang mit IN-Abfragen: WHERE IN -Anweisungen verstehen
Bei der Arbeit mit Datenbankabfragen , ist das Abrufen bestimmter Datensätze basierend auf einer Reihe von Werten eine häufige Anforderung. Die WHERE IN -Anweisung bietet eine effiziente Möglichkeit, dies zu erreichen.
Datenbankschema und -absicht
Betrachten Sie die folgende Datenbank Tabelle:
CREATE TABLE IF NOT EXISTS tab (_id integer PRIMARY KEY AUTOINCREMENT, obj text NOT NULL);
Sie beabsichtigen, Datensätze abzurufen, bei denen der obj-Spaltenwert mit einer Liste von Variablen übereinstimmt, was möglich ist bei unsachgemäßer Handhabung anfällig für SQL-Injection sein.
Erster Ansatz: Manuelle Methode
Versuch, die Abfrage manuell zu erstellen, indem list_of_vars und join() verwendet werden, um die Platzhalterzeichenfolge zu generieren kann aufgrund einer Nichtübereinstimmung der Anzahl der Bindungen einen Fehler auslösen.
statement = "SELECT * FROM tab WHERE obj IN (?);" c.execute(statement, "'"+"','".join(list_of_vars)+"'")
Empfohlener Ansatz: Parametrisierte Abfrage
Um eine IN-Abfrage sicher auszuführen, verwenden Sie Parameterplatzhalter (?) und binden Sie die Liste der Variablen als Parameter. Erstellen Sie die Anweisung mit der Formatmethode, um die entsprechende Anzahl von Platzhaltern zu generieren:
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
Durch die Übergabe von list_of_vars als Parameterwerteliste stellen Sie eine ordnungsgemäße Bindung sicher und verhindern SQL-Injection-Schwachstellen.
Das obige ist der detaillierte Inhalt vonWie kann ich WHERE IN-Anweisungen sicher verwenden, um SQL-Injection zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!