Evitando um ataque de spam com javascript no Python

Olá!
No artigo anterior abordei sobre como evitar SQL Injection no Python. Neste vamos melhorar ainda mais o código abordado neste artigo. Indico que você leia-o também.

Código:

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

Qual o problema com este código?

Bom, indo bem direto ao ponto, o problema é que o conteúdo (content) que vem da página web não está sendo tratado, ou seja, pode ainda haver um código malicioso como um script. Vamos fazer um exemplo:

No textarea da página web posso colocar algo como:

<script> setTimeout(function() { document.getElementById('content').value = "Página com problema!"; document.getElementById('content').form.submit(); }, 1000); </script>

Uau! Veja, se eu colocar isso, não haverá um erro 500, porque eu tratei isso usando a maneira correta no momento da inserção (veja no artigo sobre SQL Injection), porém o script inserido no banco rodará toda vez vai inserir diversas vezes o mesmo texto, o qual conhecemos como spam.

E como resolver?

Bom, primeiramente para resolver precisamos importar uma biblioteca chamada blench (Leia a documentação), ela age como um ‘limpador’ de strings, na qual transforma tags HTML em textos de fato. Ele nos ajudará a evitar uma vulnerabilidade de segurança do nosso código.

Corrigindo…

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

Bom, utilizamos o método blench.clean(content). Agora não teremos mais esta vunerabilidade e nosso código está mais seguro.

Originally published at edertaveira.com on January 14, 2019.

--

--

--

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

Demystifying Python’s Style Guide PEP 8

String Methods in Python

What are python packages and how to fix a python packages error “TypeError: ‘module’ object is not…

Python packages

Function in Python