
Para definir uma política de controle de frame no WordPress e reduzir o risco de clickjacking, você pode configurar o cabeçalho HTTP X-Frame-Options
ou a diretiva Content-Security-Policy
(CSP) com a opção frame-ancestors
. O clickjacking é uma técnica maliciosa onde um atacante engana o usuário para clicar em algo diferente do que ele acredita estar clicando, geralmente usando iframes. Abaixo, explico como implementar essas soluções no WordPress.
Comece a sua política de controle de frame
1. Configurar o cabeçalho X-Frame-Options
O cabeçalho X-Frame-Options
controla se uma página pode ser exibida dentro de um <frame>
ou <iframe>
. As opções mais comuns são:
DENY
: Impede que a página seja exibida em qualquer iframe.SAMEORIGIN
: Permite apenas que a página seja exibida em iframes do mesmo domínio.
Implementação no WordPress
Adicione o seguinte código ao arquivo functions.php
do seu tema ativo ou tema filho:
// Adiciona o cabeçalho X-Frame-Options para prevenir clickjacking
function add_x_frame_options_header() {
header('X-Frame-Options: DENY');
}
add_action('send_headers', 'add_x_frame_options_header');
Explicação:
- A função
add_x_frame_options_header
define o cabeçalhoX-Frame-Options
comoDENY
. - O hook
send_headers
garante que o cabeçalho seja enviado com todas as respostas HTTP. - Use
SAMEORIGIN
em vez deDENY
se você precisar permitir iframes no mesmo domínio.
Alternativa via .htaccess (para servidores Apache):
Se você prefere configurar no nível do servidor, adicione o seguinte ao arquivo .htaccess
na raiz do WordPress:
Header set X-Frame-Options "DENY"
Nota: Certifique-se de que seu servidor não sobrescreva esse cabeçalho. Teste usando as ferramentas de desenvolvedor do navegador (F12 > Network > Headers).
2. Configurar Content-Security-Policy
(CSP) com frame-ancestors
O cabeçalho Content-Security-Policy
é uma abordagem mais moderna e flexível, permitindo maior controle sobre quem pode enquadrar sua página. A diretiva frame-ancestors
substitui X-Frame-Options
em navegadores modernos.
Implementação no WordPress
Adicione o seguinte código ao functions.php
:
// Adiciona o cabeçalho Content-Security-Policy para prevenir clickjacking
function add_csp_header() {
header("Content-Security-Policy: frame-ancestors 'self'");
}
add_action('send_headers', 'add_csp_header');
Explicação:
frame-ancestors 'self'
: Permite que a página seja exibida em iframes apenas do mesmo domínio.- Para bloquear completamente iframes, use
frame-ancestors 'none'
. - Para permitir domínios específicos, use
frame-ancestors 'self' https://exemplo.com
.
Alternativa via .htaccess (Apache):
Header set Content-Security-Policy "frame-ancestors 'self';"
Alternativa via meta tag (se não puder modificar cabeçalhos):
Se você não tem acesso ao servidor ou ao functions.php
, pode adicionar uma meta tag ao <head>
do WordPress. Adicione ao functions.php
:
// Adiciona meta tag CSP no head
function add_csp_meta_tag() {
echo '<meta http-equiv="Content-Security-Policy" content="frame-ancestors \'self\'">';
}
add_action('wp_head', 'add_csp_meta_tag');
Nota: A meta tag é menos robusta, pois alguns navegadores podem ignorá-la, e ela não suporta todas as diretivas do CSP.
3. Usar plugins para facilitar
Se preferir não editar código, você pode usar plugins do WordPress para configurar esses cabeçalhos:
- Headers Security Advanced & HSTS WP: Permite configurar
X-Frame-Options
eContent-Security-Policy
via interface. - Security Headers: Outro plugin que facilita a configuração de cabeçalhos de segurança.
4. Testando a implementação
- Ferramentas do navegador: Acesse seu site, abra as ferramentas de desenvolvedor (F12), vá para a aba “Network”, recarregue a página e verifique os cabeçalhos de resposta (
X-Frame-Options
ouContent-Security-Policy
). - Ferramentas online: Use ferramentas como
securityheaders.com
para verificar se os cabeçalhos estão configurados corretamente. - Teste prático: Tente incorporar sua página em um iframe de um domínio diferente. Se configurado corretamente, o navegador bloqueará o carregamento.
5. Considerações
- Compatibilidade:
X-Frame-Options
é amplamente suportado, masContent-Security-Policy
é mais moderno. Para máxima compatibilidade, use ambos. - Exceções: Se seu site precisa ser incorporado em iframes de outros domínios confiáveis (ex.: para widgets), configure
frame-ancestors
com os domínios permitidos. - Impacto: Certifique-se de que sua configuração não quebre funcionalidades legítimas, como widgets ou integrações de terceiros.
Saiba mais sobre o clickjacking no site kaspersky