Seite 1 von 1

SQL-Injection in Flask-SQLAlchemy

Verfasst: Montag 25. September 2023, 08:30
von PythonCodingFun
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 :)

Re: SQL-Injection in Flask-SQLAlchemy

Verfasst: Montag 25. September 2023, 08:42
von __deets__
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.

Re: SQL-Injection in Flask-SQLAlchemy

Verfasst: Montag 25. September 2023, 08:47
von PythonCodingFun
__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 ?

Re: SQL-Injection in Flask-SQLAlchemy

Verfasst: Montag 25. September 2023, 08:58
von __deets__
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.
"""

Re: SQL-Injection in Flask-SQLAlchemy

Verfasst: Montag 25. September 2023, 09:03
von PythonCodingFun
__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()
?!

Re: SQL-Injection in Flask-SQLAlchemy

Verfasst: Montag 25. September 2023, 09:13
von __blackjack__
@PythonCodingFun: Das ist sicher, beziehungsweise hätte da denn jemand anderes den Fehler begangen, nicht Du.