A REST API do WordPress foi introduzida para facilitar integrações modernas. Mas, para muitos sites, ela representa uma porta de entrada para vazamento de dados e superfícies desnecessárias de ataque. Neste post, você verá como desativá-la ou controlá-la com precisão sem depender de plugins externos, usando abordagens diretas e seguras.
O Que é a REST API do WordPress?
A REST API fornece uma interface HTTP (via JSON) para acessar e manipular dados do site: posts, usuários, comentários, categorias, entre outros.
Exemplo de rota pública:
https://seudominio.com/wp-json/wp/v2/users
Essa rota expõe os usuários registrados, mesmo sem autenticação. Embora o WordPress limite algumas informações, isso ainda pode ser explorado.
Opções para Fechar ou Restringir a API
Abaixo, veja os métodos recomendados, ordenados por grau de impacto.
1. Restringir a API a usuários autenticados
Este é o método mais equilibrado: mantém a funcionalidade para quem está logado (painel, AJAX, Gutenberg), mas bloqueia o acesso externo anônimo.
Código:
add_filter('rest_authentication_errors', function($result) {
if (!is_user_logged_in()) {
return new WP_Error('rest_cannot_access', 'Acesso à API desabilitado para visitantes.', ['status' => 403]);
}
return $result;
});
Onde colocar: no functions.php
ou em um MU-plugin (ver final do post).
2. Remover rotas específicas (como usuários)
Mesmo que a API esteja habilitada, é possível remover rotas sensíveis que entregam informações valiosas.
Código:
add_filter('rest_endpoints', function($endpoints) {
unset($endpoints['/wp/v2/users']);
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
return $endpoints;
});
Utilidade: evita que bots ou ferramentas automáticas consultem a lista de usuários.
3. Desabilitar a API por completo
Esse método elimina a REST API completamente, devolvendo erro 403 para qualquer chamada. Atenção: o editor Gutenberg, comentários AJAX e partes do painel podem parar de funcionar.
Código:
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
add_filter('rest_authentication_errors', function() {
return new WP_Error('rest_disabled', 'A API REST está desabilitada neste site.', ['status' => 403]);
});
Recomendado apenas para sites estáticos ou com editores desativados.
4. Bloquear a API via Apache (.htaccess)
Se você usa Apache, é possível bloquear a URL da API no nível do servidor. Esse método não depende do WordPress.
Exemplo de .htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/ [NC]
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
RewriteRule ^ - [F,L]
</IfModule>
Explicação: bloqueia acesso a /wp-json/
, exceto para o IP indicado. Substitua pelo seu IP.
Como Criar um MU-Plugin Para Isso
MU-Plugins (Must-Use Plugins) são carregados automaticamente pelo WordPress e não podem ser desativados pelo painel.
Passo a passo:
- Acesse o diretório:
wp-content/mu-plugins/
Se não existir, crie. - Crie o arquivo:
fechar-api.php
- Conteúdo do plugin:
<?php
/*
Plugin Name: Fechar REST API
Description: Bloqueia ou restringe a REST API do WordPress.
Author: DevData Sistemas
*/
add_filter('rest_authentication_errors', function($result) {
if (!is_user_logged_in()) {
return new WP_Error('rest_cannot_access', 'Acesso à API desabilitado para visitantes.', ['status' => 403]);
}
return $result;
});
add_filter('rest_endpoints', function($endpoints) {
unset($endpoints['/wp/v2/users']);
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
return $endpoints;
});
Resultado: visitantes anônimos não conseguem acessar a API e as rotas de usuários são ocultadas completamente.
Considerações Finais
- A REST API é útil, mas se não for utilizada, deve ser desabilitada ou controlada.
- Nunca confie na configuração padrão do WordPress para segurança.
- MU-Plugins são ideais para aplicar políticas imutáveis de segurança.
- Sempre teste em ambiente de homologação antes de aplicar em produção.