PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

psycopg2 e segurança de injeção SQL


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.