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: 14545
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: 14545
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: 13126
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.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten