AsIs
är osäker, om du inte riktigt vet vad du gör. Du kan till exempel använda den för enhetstestning.
Att skicka parametrar är inte så osäkert, så länge du inte förformaterar din sql-fråga. Gör aldrig:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Sedan user_input
kan vara ';DROP DATABASE;'
till exempel.
Gör istället:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
kommer att rensa din fråga. Du kan också försanera parametrarna i din kod med din egen logik, om du verkligen inte litar på din användares input.
Enligt psycopg2
s dokumentation
:
Dessutom skulle jag aldrig, aldrig, låta mina användare berätta för mig vilken tabell jag ska fråga. Din app logik (eller rutter) borde berätta det.
Angående AsIs()
, enligt psycopg2
s dokumentation
:
Så använd den inte med användarens input.