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 <b>…</b>, um <a>…</a>, ou um <iframe></iframe>… Vai tudo pro saco.
Veja um exempo de uso:
< ?php // Define uma string com código HTML $entrada = '<p>Ahá... <a href="mailto: fulaninho@uol.com.br">eu</a> sou <strong>malandrão!</strong></p>'; $saida = strip_tags($entrada); echo $saida; // Saída: Ahá... eu sou malandrão! ?>
Você também pode, se quiser, definir TAGs permitidas, que permanecerão na string:
< ?php // Define uma string com código HTML $entrada = '<p>Ahá... <a href="mailto: fulaninho@uol.com.br">eu</a> sou <strong>malandrão!</strong></p>'; $saida = strip_tags($entrada, '<strong><p>'); echo $saida; // Saída: <p>Ahá... eu sou <strong>malandrão!</strong></p> ?>
» 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 <b>Hahá!</b> na string, vai aparecer tudo, inclusive o <b>…</b> (e não negrito).
Exemplo de uso:
< ?php $entrada = 'Eu sou <i>çagaiz</i>!'; $saida = htmlspecialchars($entrada); echo $saida; // Saída: Eu sou <i>çagaiz</i>! (Aparecerão todos os caracteres, como se o HTML fosse string) ?>
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:
< ?php $nome = "Fulaninho's"; $nome = mysql_real_escape_string($nome); $sql = "INSERT INTO `usuarios` VALUES (NULL, '".$nome."')"; mysql_query($sql); ?>
Sem o uso da função, a consulta passada para o MySQL ficaria assim:
INSERT INTO `usuarios` VALUES (NULL, 'Fulaninho's')
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:
INSERT INTO `usuarios` VALUES (NULL, 'Fulaninho\'s')
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!
Você também vai gostar de ler:
- Removendo acentos de uma string – URLs amigáveis
- Como criar um Sistema de Login com Níveis de Permissão
- Instalando o PHPIDS no seu site
- Contador de visitas usando o MySQL
- Contador de visitantes online em PHP e MySQL
Postado em HTML, MySQL, PHP, Tutoriais
Com as tags Banco de Dados, Busca, Código, comentários, Documentação, Funções, HTML, INSERT, MySQL, PHP, Proteção, Scripts, Segurança, SQL, Strings, Web, WEB 2.0
Escrito por Thiago Belem
Gostou desse artigo?
Não se esqueça de assinar o RSS e divulgue-o para o mundo:
