AsIs
er usikker, medmindre du virkelig ved, hvad du laver. Du kan f.eks. bruge den til enhedstest.
Det er ikke så usikkert at sende parametre, så længe du ikke forudformaterer din sql-forespørgsel. Gør aldrig:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Siden user_input
kunne være ';DROP DATABASE;'
for eksempel.
Gør i stedet:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
vil rense din forespørgsel. Du kan også præ-sanere parametrene i din kode med din egen logik, hvis du virkelig ikke stoler på din brugers input.
Per psycopg2
s dokumentation
:
Desuden ville jeg aldrig nogensinde lade mine brugere fortælle mig, hvilken tabel jeg skulle forespørge på. Din apps logik (eller ruter) burde fortælle dig det.
Angående AsIs()
, af psycopg2
s dokumentation
:
Så brug det ikke med brugerens input.