AsIs
não é seguro, a menos que você realmente saiba o que está fazendo. Você pode usá-lo para testes de unidade, por exemplo. Passar parâmetros não é tão inseguro, desde que você não pré-formate sua consulta sql. Nunca faça:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Desde
user_input
poderia ser ';DROP DATABASE;'
por exemplo. Em vez disso, faça:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
irá higienizar sua consulta. Além disso, você pode pré-higienizar os parâmetros em seu código com sua própria lógica, se você realmente não confiar na entrada do seu usuário. Por
psycopg2
documentação
:Além disso, eu nunca, jamais, deixaria meus usuários me dizerem qual tabela eu deveria consultar. A lógica (ou rotas) do seu aplicativo deve informar isso.
Sobre
AsIs()
, por psycopg2
documentação
:Portanto, não o use com a entrada do usuário.