AsIs
est dangereux, à moins que vous ne sachiez vraiment ce que vous faites. Vous pouvez l'utiliser pour des tests unitaires par exemple.
Passer des paramètres n'est pas si dangereux, tant que vous ne pré-formatez pas votre requête sql. Ne jamais faire :
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Depuis user_input
pourrait être ';DROP DATABASE;'
par exemple.
À la place, faites :
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
va assainir votre requête. De plus, vous pouvez pré-assainir les paramètres de votre code avec votre propre logique, si vous ne faites vraiment pas confiance à l'entrée de votre utilisateur.
Par psycopg2
documentation de
:
De plus, je ne laisserais jamais, au grand jamais, mes utilisateurs me dire quelle table je devrais interroger. La logique (ou les itinéraires) de votre application devrait vous le dire.
Concernant AsIs()
, selon psycopg2
documentation de
:
Donc, ne l'utilisez pas avec l'entrée de l'utilisateur.