Evitando SQL Injection - Python

Um exemplo prático de como melhorar a segurança de sua aplicação.

  • Python (Versão 3)
  • psycopg2

O que é SQL Injection?

É uma técnica de injeção de código, para ataques a aplicações conectadas à um banco de dados, na qual instruções maliciosas são incluídas em um campo de entrada para execução.

Cenário

Digamos que temos uma página web na qual através de um textarea os usuários podem postar comentários.
No trecho de código abaixo é onde chega a informação e é armazenada.

def add_comments(content):  
conn = psycopg2.connect("dbname=yourdatabase")
cursor = conn.cursor()
cursor.execute("insert into comments values ('$s')" % content)
conn.commit()
conn.close()

Onde está o problema do código acima? Você consegue identificar?

Bom, antes de identificar e corrigir o problema, vejamos na documentação do psycopg o que ele nos diz sobre:

Trecho da documentação do Python.

Traduzindo. A documentação nos adverte a nunca, NUNCA usar concatenação string (+) ou interpolação de string (%) para passar uma variável para uma string SQL.

O que isso causa?

Fazendo dessa forma ( cursor.execute(“insert into comments values (‘$s’)” % content) ) Ao usar por exemplo uma aspa ou outro caractere especial, o código dará um erro 500 (Internal Server Error), em virtude do caracter ser diretamente concatenado à string SQL, fazendo com que ela se corrompa.

Como corrigir isso?

Conforme a documentação do psycopg nos diz no box em verde vamos corrigir nosso código para resolver o problema:

def add_comments(content):  
conn = psycopg2.connect("dbname=yourdatabase")
cursor = conn.cursor()
cursor.execute("insert into comments values ($s)", (content,))
conn.commit()
conn.close()

Pronto, agora o problema de fato foi resolvido e nos protegemos do SQL Injection.

--

--

--

Software Engineer, Full Stack Developer, Musician and Writer. edertaveira.com

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Eder Taveira

Eder Taveira

Software Engineer, Full Stack Developer, Musician and Writer. edertaveira.com

More from Medium

Python and REST APIs

Building REST APIs using Flask

Simple Flask Application

A SIMPLE API USING PYTHON AND FLASK