MySQL-automatische Escape-Funktion von Parametern in Python

Zusammenfassung

Verwenden Sie den in Cursor.execute (self, query, args = None) beschriebenen Platzhalter, wenn Sie Abfragen mit dem MySQL-Python-Modul (MySQLdb) von Python erstellen.

query -- string, query to execute on server
args -- optional sequence or mapping, parameters to use with query.

Note: If args is a sequence, then %s must be used as the
parameter placeholder in the query. If a mapping is used,
%(key)s must be used as the placeholder.

Testtabelle

Erstellen Sie die folgende Tabelle zum Testen.

mysql> select * from testdb.person;
+------+--------+
| id   | name   |
+------+--------+
|    1 | foo    |
|    2 | bar    |
+------+--------+

schlechtes Beispiel

bad.py


import MySQLdb


def select(name):
    connection = MySQLdb.connect(db='testdb', user='testuser')
    cursor = connection.cursor()
    cursor.execute("select * from person where name='%s'" % name)
    print("[query]")
    print(cursor._last_executed)
    print("[result]")
    result = cursor.fetchall()
    for rec in result:
        print(rec)

Wenn Sie select (" foo ") auswählen, sieht es so aus, als würde es gut funktionieren.

[query]
select * from person where name='foo'
[result]
(1L, 'foo')

Aber wenn Sie so etwas wie "select" ("foo" oder name = name - ")" tun

[query]
select * from person where name='foo' or name=name-- '
[result]
(1L, 'foo')
(2L, 'bar')

Und die SQL-Injection ist fertig.

Gutes Beispiel

good.py


import MySQLdb


def select(name):
    connection = MySQLdb.connect(db='testdb', user='testuser')
    cursor = connection.cursor()
    cursor.execute("select * from person where name=%s", name)
    print("[query]")
    print(cursor._last_executed)
    print("[result]")
    result = cursor.fetchall()
    for rec in result:
        print(rec)

Ich habe nur den Argumentteil von cursor.execute () geändert.

select (" foo ") funktioniert genauso wie im vorherigen Beispiel.

[query]
select * from person where name='foo'
[result]
(1L, 'foo')

Selbst wenn Sie "select" ("foo'or name = name--") "auswählen, wird es ordnungsgemäß ausgeblendet.

[query]
select * from person where name='foo\' or name=name-- '
[result]

Verweise

http://stackoverflow.com/questions/1947750/does-python-support-mysql-prepared-statements

Recommended Posts

MySQL-automatische Escape-Funktion von Parametern in Python
Objektäquivalenzbeurteilung in Python
Implementierung der schnellen Sortierung in Python
Bildpixel-Manipulation in Python
Zeitdelta in Python 2.7-Serie teilen
Umgang mit JSON-Dateien in Python
Implementierung eines Lebensspiels in Python
Audio-Wellenform-Anzeige in Python
Das Gesetz der Zahlen in Python
Implementierung der ursprünglichen Sortierung in Python
Reversibles Verwürfeln von Ganzzahlen in Python
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex5 (Anpassung der Regularisierungsparameter)
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
Übung, dies in Python zu verwenden (schlecht)
Allgemeine Relativitätstheorie in Python: Einführung
Ausgabebaumstruktur von Dateien in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Vergleich japanischer Konvertierungsmodule in Python3
Zusammenfassung verschiedener for-Anweisungen in Python
Das Ergebnis der Installation von Python auf Anaconda
Gang of Four (GoF) -Muster in Python
Grundlagen zum Ausführen von NoxPlayer in Python
Massenersatz von Zeichenfolgen in Python-Arrays
Projekt Euler # 16 "Summe der Kräfte" in Python
Traffic Safety-Kun: Erkennung von Verkehrszeichen in Python
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Nicht logische Operatorverwendung von oder in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Praktisches Beispiel für hexagonale Architektur in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Doppelte Pendelbewegungsgleichung in Python
Entfernen Sie DICOM-Bilder in Python
Status jedes Python-Verarbeitungssystems im Jahr 2020
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
[Python] Erweitern Sie Escape-Sequenzen in Hördokumenten
Quadtree in Python --2
Python in der Optimierung
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Python-Grundlagen ①
Grundlagen von Python ①
Programmieren mit Python
Plink in Python
Konstante in Python
Kopie von Python
FizzBuzz in Python