SQL-Injection in Flask-SQLAlchemy

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
PythonCodingFun
User
Beiträge: 49
Registriert: Mittwoch 22. September 2021, 14:01

Hallo liebe Community,

ich nutze für die für meine Flask Webanwendung Flask-SQLAlchemy (Stichwort ORM), das heißt in meinem Fall, das ich auch explizit kein SQL nutze um anfragen etc. zu machen. Aber ist damit auch die Anwendung gegen SQL-Injection geschützt ? Ich habe nämlich diesbezüglich kein gutes Gefühl, falls ich richtig liege was muss ich zusätzlich (wohl in Python) Coden damit ich diese mögliche Sicherheitsschwachstelle "ausmerze".


Wie sind da eure Erfahrungen ?



Über Hilfe würde ich mich sehr freuen :)
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die idiomatische Nutzung von SQLAlchemy beugt SQL-Injection vor. Wenn du natuerlich SQL-Statements als ganzes mit String-Operationen zusammenbaust, und die dann einfach nur ausfuehren laesst, hilft's nix. Aber sobald du durch die SA-spezifische DSL gehst , ist das ok.
PythonCodingFun
User
Beiträge: 49
Registriert: Mittwoch 22. September 2021, 14:01

__deets__ hat geschrieben: Montag 25. September 2023, 08:42 Die idiomatische Nutzung von SQLAlchemy beugt SQL-Injection vor. Wenn du natuerlich SQL-Statements als ganzes mit String-Operationen zusammenbaust, und die dann einfach nur ausfuehren laesst, hilft's nix. Aber sobald du durch die SA-spezifische DSL gehst , ist das ok.
Kannst Du mir mit dem Begriff SA-spezifische DSL weiterhelfen, was ist damit im SQLAlchemy Kontext gemeint ?
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die SA-Apis zur Erzeugung von SQL. Also zB https://docs.sqlalchemy.org/en/20/core/ ... ssion.and_ und die select Methode etc. NICHT die text()-Methode! Das steht da auch ganz dick. https://docs.sqlalchemy.org/en/20/core/ ... ssion.text

""
The text.text argument to text() can be passed as a Python string argument, which will be treated as trusted SQL text and rendered as given. DO NOT PASS UNTRUSTED INPUT TO THIS PARAMETER.
"""
PythonCodingFun
User
Beiträge: 49
Registriert: Mittwoch 22. September 2021, 14:01

__deets__ hat geschrieben: Montag 25. September 2023, 08:58 Die SA-Apis zur Erzeugung von SQL. Also zB https://docs.sqlalchemy.org/en/20/core/ ... ssion.and_ und die select Methode etc. NICHT die text()-Methode! Das steht da auch ganz dick. https://docs.sqlalchemy.org/en/20/core/ ... ssion.text

""
The text.text argument to text() can be passed as a Python string argument, which will be treated as trusted SQL text and rendered as given. DO NOT PASS UNTRUSTED INPUT TO THIS PARAMETER.
"""
Ach so, also auch sowas wie:

Code: Alles auswählen

db.session.add(foo)
oder

Code: Alles auswählen

db.session.query(Foo).filter_by(id=foo_id).delete()
?!
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@PythonCodingFun: Das ist sicher, beziehungsweise hätte da denn jemand anderes den Fehler begangen, nicht Du.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten