PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

psycopg2 e la sicurezza dell'iniezione SQL

AsIs non è sicuro, a meno che tu non sappia davvero cosa stai facendo. Ad esempio, puoi usarlo per unit test.

Il passaggio dei parametri non è così pericoloso, purché non si preformatta la query sql. Non farlo mai:

sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)

Da user_input potrebbe essere ';DROP DATABASE;' per esempio.

Invece, fai:

sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))

pyscopg2 sanificherà la tua richiesta. Inoltre, puoi pre-sanitizzare i parametri nel tuo codice con la tua logica, se davvero non ti fidi dell'input del tuo utente.

Per psycopg2 la documentazione :

Inoltre, non consentirei mai e poi mai ai miei utenti di dirmi quale tabella dovrei interrogare. La logica (o i percorsi) della tua app dovrebbero dirtelo.

Riguardo a AsIs() , per psycopg2 la documentazione :

Quindi, non usarlo con l'input dell'utente.