No mundo da WEB 2.0 é muito comum sites que permitam que seus visitantes entrem com dados e textos em campos… Comentários, cadastros, nomes e por aí vai… Só que muita gente abusa da boa vontade e descuido alheio e tenta “brincar” com os sites, inserindo blocos de códigos HTML, sendo alguns deles até maliciosos, diga-se de passagem.
Você, nobre programador, precisa estar pronto para o pior… E uma frase muito comum no nosso meio é “o usuário é o seu maior inimigo”, infelizmente isso é uma realidade, e das mais cruas. Não é que todo mundo faz isso por mal… Mas, mesmo sem querer, acabam fazendo o mal, entende?
Então vou falar aqui sobre três funções que podem ser usadas para amenizar esse problema: a strip_tags(), htmlspecialchars() e a mysql_real_escape_string()… Cada uma faz uma coisa, mas todas ajudam nesse tipo de proteção.
Função strip_tags()
O que essa função faz é simples, curto e grosso: acaba, some, oculta, exclui, remove e destrói QUALQUER código HTML da string. Não importa se é um </strong>…</b></span>, um </strong></span>…</a>, ou um <iframe></iframe>… Vai tudo pro saco.
Veja um exempo de uso:
Você também pode, se quiser, definir TAGs permitidas, que permanecerão na string:
» Documentação da strip_tags()
Função htmlspecialchars()
A htmlspecialchars não remove as TAGs HTML… Ela escapa o código HTML… Transformando-o em códigos/entidades para exibição… Ou seja, se existe um </strong></span>Hahá!</b> na string, vai aparecer tudo, inclusive o </strong>…</b></span> (e não negrito).
Exemplo de uso:
Com isso você vai poder saber exatamente o que o espertinho tentou inserir no seu código… :)
» Documentação da htmlspecialchars()
Função mysql_real_escape_string()
No quesito segurança, essa é a função mais legal.. Ela serve pra quando você for inserir aquele código malicioso (que o usuário postou) no seu banco de dados… A função escapa todos os caracteres que o MySQL possa vir a usar e se confundir achando que faz parte da sua query…
Vamos dar um exemplo:
Sem o uso da função, a consulta passada para o MySQL ficaria assim:
Repare que a aspas que fecha o valor a ser inserido, é a que vem depois do “o”, e não a que veio depois do “s”, que seria o correto… O que daria erro no MySQL ou acabaria resultado no cadastro de dados errados e pela metade.
Já usando a função, ficaria assim:
O que fazer com que o nome seja inserido de forma correta, e quando você fizer um SELECT para buscar esse dado, ele virá Fulaninho’s (sem a barra).
» Documentação da mysql_real_escape_string()
E aí? O que me diz? Problemas com strings malemolentes? Nunca mais!