sql >> Base de Datos >  >> RDS >> PostgreSQL

psycopg2 y seguridad de inyección SQL

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.