Por que a sanitização é importante?
Ou seja, ao permitir que usuários insiram HTML
você corre o risco de que scripts maliciosos sejam executados no navegador de outras pessoas — o que pode comprometer a segurança dos dados e da navegação.
A esse tipo de ameaça damos o nome de XSS (Cross-site Scripting).
Para evitar esse tipo de vulnerabilidade, é necessário realizar a sanitização do conteúdo, removendo qualquer tag ou atributo perigoso antes que ele seja exibido.
Felizmente, o WordPress oferece recursos prontos para isso — e é exatamente o que você verá a seguir.
Passo 1: Recupere o conteúdo do ACF
Agora que entendemos a importância da sanitização, vamos começar com o primeiro passo: recuperar o conteúdo do ACF.
$descricao_html = get_field('descricao_html');
Passo 2: Use a função wp_kses()
Depois de recuperar o conteúdo, em seguida, Use a função wp_kses()
para sanitizar o conteúdo.
$descricao_html_sanitizada = wp_kses($descricao_html, array(
'p' => array(), // Permite tags
'a' => array('href' => true, 'title' => true), // Permite links com atributos href e title
'strong' => array(), // Permite a tag
'em' => array(), // Permite a tag
// Adicione outras tags e atributos conforme necessário
));
Passo 3: Exiba o conteúdo sanitizado
Agora que você sanitizou o conteúdo, pode exibi-lo de forma segura no front-end:
// exibe o conteúdo sanitizado
echo $descricao_html_sanitizada;
Passo 4: Permitir ou restringir tags adicionais
O WordPress possui uma lista de tags e atributos permitidos por padrão
Mas você pode personalizá-la com a função wp_kses_allowed_html()
. Caso precise adicionar tags extras para casos específicos, basta expandir a lista com a função:
$allowed_html = wp_kses_allowed_html('post'); // Obtém as tags permitidas para posts
$allowed_html['span'] = array('class' => true); // Adiciona a tag com o atributo class
$descricao_html_sanitizada = wp_kses($descricao_html, $allowed_html);
Dica de performance
Quando você trabalha com conteúdo dinâmico, como o ACF
E precisa sanitizar em grande escala, Além disso, quando você trabalha com conteúdo dinâmico, como o ACF, é recomendado armazenar os resultados da sanitização para melhorar a performance. Utilize o set_transient() ou wp_cache_set() para armazenar os dados sanitizados temporariamente, evitando a necessidade de recalcular a sanitização repetidamente.
Exemplo:
$cache_key = 'descricao_html_sanitizada';
$descricao_html_sanitizada = get_transient($cache_key);
if ( false === $descricao_html_sanitizada ) {
$descricao_html_sanitizada = wp_kses($descricao_html, $allowed_html);
set_transient($cache_key, $descricao_html_sanitizada, HOUR_IN_SECONDS);
}
echo $descricao_html_sanitizada;
Como lidar com HTML complexo
Se você precisa permitir mais tags HTML específicas
O ACF possui campos que permitem edição de HTML mais flexível, como o campo WYSIWYG (What You See Is What You Get), que é mais robusto. No entanto, é sempre importante garantir que, mesmo em campos mais dinâmicos, você tenha controle sobre a segurança dos dados.
Como vimos, a sanitização no WordPress com wp_kses é uma etapa crítica quando se trabalha com HTML vindo do ACF.
Conclusão
Em resumo, sanitizar o conteúdo HTML vindo do ACF
É essencial para garantir que seu site permaneça seguro. Usando wp_kses()
, você pode controlar o que é permitido no HTML, evitando que scripts maliciosos sejam executados. Portanto, a prática de sanitização deve ser aplicada de forma consistente, principalmente quando você permite que os usuários insiram conteúdo personalizado.
Agora, ao utilizar campos ACF com HTML, você pode garantir a segurança do seu site e aproveitar a flexibilidade desses campos de forma responsável. Se você gostou dessas dicas, compartilhe com sua equipe de desenvolvimento ou com outros colegas que trabalham com WordPress! 🚀
❓ Perguntas Frequentes (FAQ)
É seguro usar HTML nos campos do ACF?
Qual a melhor forma de sanitizar HTML no WordPress?
Posso usar wp_kses com qualquer tipo de campo ACF?
Existe uma forma de permitir mais tags HTML no WordPress?
Agora que você sabe como proteger o HTML dos campos ACF, implemente essas práticas no seu projeto WordPress e compartilhe este conteúdo com sua equipe ou comunidade! 🚀