SQLAlchemy + SQL-Injektion
Was sind die besten Methoden zur Abwehr von SQL-injection-Angriffe bei Verwendung von SQLAlchemy?
InformationsquelleAutor der Frage Mike | 2011-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was sind die besten Methoden zur Abwehr von SQL-injection-Angriffe bei Verwendung von SQLAlchemy?
InformationsquelleAutor der Frage Mike | 2011-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
[pro http://www.rmunn.com/sqlalchemy-tutorial/tutorial.html]
InformationsquelleAutor der Antwort Andreas Jung
tldr: Vermeiden Sie rohes SQL so viel wie möglich.
Die akzeptierte Antwort ist faul und falsch. Die filter-Methode akzeptiert raw-SQL, und wenn auf diese Weise eingesetzt, ist voll anfällig für SQL-injection-Angriffe. Zum Beispiel, wenn Sie waren zu akzeptieren, die einen Wert aus einer url und kombinieren Sie es mit raw-sql in die filter, Sie sind angreifbar:
session.query(MyClass).filter("foo={}".format(getArgs['val']))
verwenden des obigen Codes und die url unten, würden Sie injizieren SQL in Ihre filter-Anweisung. Der obige code würde alle Zeilen in Ihrer Datenbank.
http://domain.com/?val=2%20or%201%20=%201
InformationsquelleAutor der Antwort Tendrid
Hinzufügen @Tendrid Antwort. Ich habe eine kleine Untersuchung mit ruhigen naive Ansatz.
filter
Methode hat*criterion
als argument, mehrere andere ORM-Query-Methoden haben ähnlich argumentiert.Im Falle von
filter
Methode*criterion
argument endet bestanden in _literal_as_textdie im Falle der Schnur markiert es als sicher sql (bitte korrigiert mich wenn ich falsch Liege). Daher macht es unsicher.Hier ist das Ergebnis ORM-Query-Klasse Methode Untersuchung mit
*criterion
argument:Beispiele für mögliche Methode missuses (um es einfach zu halten, werden string-Formatierung wird übersprungen):
Hinweisdass diese Methoden nur unsicher, wenn string-literal übergeben wird.
InformationsquelleAutor der Antwort aisbaa