AsIs
ist unsicher, es sei denn, Sie wissen wirklich, was Sie tun. Sie können es zum Beispiel für Unit-Tests verwenden.
Das Übergeben von Parametern ist nicht so unsicher, solange Sie Ihre SQL-Abfrage nicht vorformatieren. Niemals:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Seit user_input
könnte ';DROP DATABASE;'
sein zum Beispiel.
Führen Sie stattdessen Folgendes aus:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
wird Ihre Anfrage bereinigen. Außerdem können Sie die Parameter in Ihrem Code mit Ihrer eigenen Logik vorab bereinigen, wenn Sie der Eingabe Ihres Benutzers wirklich nicht vertrauen.
Per psycopg2
's Dokumentation
:
Außerdem würde ich mir niemals von meinen Benutzern sagen lassen, welche Tabelle ich abfragen soll. Die Logik (oder Routen) Ihrer App sollte Ihnen das sagen.
Bezüglich AsIs()
, per psycopg2
's Dokumentation
:
Verwenden Sie es also nicht mit Benutzereingaben.