AsIs
no es seguro, a menos que realmente sepa lo que está haciendo. Puede usarlo para pruebas unitarias, por ejemplo.
Pasar parámetros no es tan inseguro, siempre y cuando no formatee previamente su consulta sql. Nunca hagas:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Desde user_input
podría ser ';DROP DATABASE;'
por ejemplo.
En su lugar, haz:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
desinfectará su consulta. Además, puede desinfectar previamente los parámetros en su código con su propia lógica, si realmente no confía en la entrada de su usuario.
Según psycopg2
documentación de
:
Además, nunca dejaría que mis usuarios me dijeran qué tabla debo consultar. La lógica (o rutas) de su aplicación debería indicarle eso.
Con respecto a AsIs()
, según psycopg2
documentación de
:
Por lo tanto, no lo use con la entrada del usuario.