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.

Deixe um comentário