Wie kann ich verhindern, dass SQL-injection in PYTHON-DJANGO?
Wenn ein lamer Eingang ist eingefügt in eine SQL-Abfrage direkt, die Anwendung ist anfällig für SQL-injection, wie im folgenden Beispiel:
dinossauro = request.GET['username']
sql = "SELECT * FROM user_contacts WHERE username = '%s';" % username
Drop Tabellen oder nichts-macht die Abfrage:
INSERT INTO table (column) VALUES('`**`value'); DROP TABLE table;--`**`')
Was kann man tun, um dies zu verhindern?
- Darf ich Sie Fragen, warum sind Sie manuell schreiben von sql-Abfragen anstelle von django-Modelle?
- Die django-ORM, außerhalb der
raw
undextra
entgeht Ihrer Fragen für Sie. Siehe die Sicherheits-docs.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst sollte man wohl nur verwenden,Django ORM, es wird verhindert, dass jede Möglichkeit von SQL-injection.
Wenn aus irgendeinem Grund Sie nicht können oder nicht wollen, dann sollten Sie Python-Datenbank-API. Hier ist die Art, wie Sie normalerweise tun, dass in Django:
Können Sie auch praktisch, python-Paket zur Reduzierung der boilerplate:
Wenn Sie
.extra()
die syntax ist:Hier zu wiederholen, von diese Antwort wie diese ist schwer zu finden, und die docs sagen, dass
"you should always be careful to properly escape any parameters"
gehen Sie nicht auf zu sagen wie richtig zu entfliehen!Aus der Django-Docs: