+7

Como bloquear tags HTML em seus projetos

criado por Jefrey em 28/09/2010 2:41pm
Muitas vezes, nós temos que permitir que nosso visitante modifique um ou mais arquivos dentro de nosso servidor, ou não existiriam os fóruns, os sistemas de comentário, os bate-papos, os livros de visitas, as páginas de recados, e outros sistemas úteis.

Mas, como na internet nada é perfeito, nossos sistemas muitas vezes se transformam em brechas para usuários mal-intencionados, que incorporam códigos maliciosos nesses campos. Devemos levar em conta que o que um usuário adicionar, será visto por todos os outros usuários.

Preocupada com a segurança do seu projeto, a equipe do PHPBrasil elaborou este artigo que lhe mostra como proteger os seus campos abertos. As opções aqui apresentadas serão selecionadas por você, dependendo da sua necessidade. Se você não quiser ter dores de cabeça por conta de travessura de usuário, é bom que você leia este artigo até o fim.
1. htmlspecialchars()

Essa função é simples e muito utilizada em sistemas de fóruns, por exemplo. Ela não retira as tags, mas as exibe para leitura. Em outras palavras, se alguém digitou:

<s>Eu sou mau!</s>

Na página não aparecerá "Eu sou mau!", mas sim, o código exatamente como foi escrita.

A utilização dessa função é simples. Veja:
<?php
$texto = "<s>Eu sou mau!</s>";
$semhtml = htmlspecialchars($texto);
echo $semhtml;
?>


Então, pelo exemplo acima, ficou fácil entender a função. Note que é simples recuperar dados de um formulário para retirar as tags.


2. strip_tags()

Essa função é tão simples quanto a anterior, mas sua ação é diferente: Ao invés de exibir as tags, ele apenas as remove. Ou seja, ele detecta a(s) tag(s) e a retira. Veja:

<?php

$texto = "<s>Eu sou mau!</s>";

$semhtml = strip_tags($texto);

echo $semhtml;

?>
Então, a única coisa que o script mostrará é a frase "Eu sou mau!", sem o risco e sem as tags.
3. mysql_real_escape_string()

Essa função também é simples de se utilizar. É muito útil em conjunto com o MySQL. Veja essa situação:

O usuário do seu site fez um comentário que possuia aspa ("). Quando o comentário foi inserido na tabela, gerou erro: Apenas a area anterior à aspa foi inserida.

Isso se resolve utilizando essa função. Veja:

<?php

$texto = "Eu sou 'mau'!";

$semhtml = mysql_real_escape_string($texto);

$sql = "INSERT INTO 'textos' VALUES (NULL, '".$texto."')";

mysql_query($sql);

?>
____________________________________

Aqui foram apresentadas a você 3 maneiras diferentes de proteger seu sistema. Cabe a você decidir qual será mais útil para você - e a utilizar, é claro!
Para saber um pouco mais sobre cada função, veja a documentação completa no site oficial do PHP:
http://www.php.net/manual/pt_BR/function.htmlspecialchars.php
http://www.php.net/manual/pt_BR/function.strip-tags.php
http://www.php.net/manual/pt_BR/function.mysql-real-escape-string.php

Bom, ficamos por aqui. Estude bastante essas três funções para que você realmente as entenda. Caso haja dúvidas, utilize o sistema de comentários no formulário abaixo. Agradecemos pela atenção e até a próxima!

Comentários:

Mostrando 1 - 8 de 8 comentários
dublatex disse:

Uma coisa que vale ressaltar é que existe uma função nativa de escape de strings especifica para cada banco de dados

<a href="http://r7filmes.com/" alt="Baixar Filmes Grátis" title="Baixar Filmes" target="_blank">Baixar Filmes</a>
18/06/2012 9:59pm (~4 anos atrás)

Jefrey disse:
Valeu, Mateus.
Eu realmente havia confundido as variáveis.
03/03/2011 8:11pm (~5 anos atrás)

Jefrey disse:
Valeu, Mateus.
Eu realmente havia confundido as variáveis.
03/03/2011 8:11pm (~5 anos atrás)

Corrigindo o exemplo 3:

<?php

$texto = "Eu sou 'mau'!";

$semhtml = mysql_real_escape_string($texto);

$sql = "INSERT INTO 'textos' VALUES (NULL, '".$semhtml."')";

mysql_query($sql);

?>
06/01/2011 12:37am (~5 anos atrás)

Mario Arroyo disse:
Muito bom!

Uma coisa que vale ressaltar é que existe uma função nativa de escape de strings especifica para cada banco de dados, como por exemplo: pg_escape_string(), do PostgreSQL.

Outra coisa muito interessante é que a função strip_tags() aceita, em seu segundo parâmetro, um array de tags permitidas. Isso é muito util, por exemplo, em um editor javascript WYSIWYG.

Abraços!
23/11/2010 9:20pm (~6 anos atrás)

Mario Arroyo disse:
Muito bom!

Uma coisa que vale ressaltar é que existe uma função nativa de escape de strings especifica para cada banco de dados, como por exemplo: pg_escape_string(), do PostgreSQL.

Outra coisa muito interessante é que a função strip_tags() aceita, em seu segundo parâmetro, um array de tags permitidas. Isso é muito util, por exemplo, em um editor javascript WYSIWYG.

Abraços!
23/11/2010 9:20pm (~6 anos atrás)

Muito interessante o artigo, parabéns !!!
09/11/2010 12:21pm (~6 anos atrás)

João Pedro disse:
Gostei bastante do Artigo. Continue Assim!
26/10/2010 7:07pm (~6 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)