REST API do WordPress: por que bloquear só as requisições sem login em vez de desativar tudo

A REST API do WordPress mostra os nomes de usuário do seu site pelo endereço wp-json até para visitantes que não fizeram login. Como desativá-la por completo pode fazer o salvamento no editor de blocos falhar, reuni aqui como bloquear só as requisições sem login e conferir isso pela resposta 401.
1️⃣ O que é a REST API do WordPress: o endereço wp-json e o que ele faz
A REST API do WordPress é um recurso nativo do WordPress que troca dados do site, como posts, páginas e usuários, em formato JSON, e responde em /wp-json/ depois do endereço do site.
Em /wp-json/, os endereços se dividem por tipo de dado, como [wp/v2/posts], [wp/v2/pages] e [wp/v2/users], e cada um deles é chamado de endpoint. O editor de blocos também envia requisições a esses endereços quando salva um post.
https://example.com/wp-json/
https://example.com/wp-json/wp/v2/posts
https://example.com/wp-json/wp/v2/pages
https://example.com/wp-json/wp/v2/users2️⃣ Nomes de usuário expostos pelo wp-json
O endpoint [wp/v2/users] devolve o nome de exibição e o slug de cada usuário que publicou posts, e por padrão o slug traz o próprio nome de login. Na conta de administrador do site de teste, https://testpilotweb.com/, o slug também era igual ao nome de login.
Com o nome de login exposto, o invasor só precisa descobrir a senha para entrar, e a tela de login do WordPress do site de teste registrou 2.570 tentativas de força bruta só em 7 de outubro de 2026.
Mesmo bloqueando este endereço, o mesmo nome de login continua no endereço da página de autor (/author/usuario/).
3️⃣ O que quebra ao desativar tudo
Desativar a WP REST API por completo quebra primeiro o salvamento de posts no editor de blocos; por isso o Perfmatters, um dos plugins de otimização do WordPress, divide o desligamento em dois níveis: [Disable for Non-Admins] e [Disable When Logged Out]. Em sites com contas de autor ou colaborador, [Disable for Non-Admins] também impede que essas contas salvem posts.
Mesmo num site que bloqueava só as requisições sem login, ao conectar um conector MCP no claude.ai, apareceram 0 ferramentas depois da autenticação. O log do servidor registrou todas as requisições MCP como 401, e a causa era o Perfmatters bloquear a requisição antes de o MCP verificar o token.
| Valor de [Disable REST API] | Endereço users para visitantes sem login | Salvamento por contas não administradoras | Indicado para |
|---|---|---|---|
| Default (Enabled) | Nomes de usuário expostos | Salva normalmente | — |
| Disable for Non-Admins | 401 | Falha ao salvar | Sites sem contas de autor ou colaborador |
| Disable When Logged Out | 401 | Salva normalmente | Sites com contas de autor; para conexões com token, como o MCP, adicione um caminho de exceção |
4️⃣ Configuração para bloquear só requisições sem login (Perfmatters)
No painel do WordPress, vá em [Settings] → [Perfmatters] → [General], mude [Disable REST API] da seção [Core] para [Disable When Logged Out] e clique em [Save Changes].


Idiomas suportados pelo Perfmatters: inglês (padrão), coreano, alemão, francês, italiano, holandês, português (Brasil), russo, ucraniano, turco, búlgaro, húngaro, indonésio, persa, chinês (simplificado)

Ao abrir /wp-json/wp/v2/users numa janela anônima sem login, volta uma resposta 401 com a mensagem [Sorry, you do not have permission to make REST API requests.], enquanto o editor de blocos continua salvando normalmente com login.
[
{
"id": 1,
"name": "User A",
"slug": "user_a",
"link": "https://example.com/author/user_a/"
}
]
{
"code": "rest_authentication_error",
"message": "Sorry, you do not have permission to make REST API requests.",
"data": { "status": 401 }
}
5️⃣ Exceções nos caminhos bloqueados
Quando precisar liberar só um caminho específico com o bloqueio ativo, adicione esse caminho ao filtro [perfmatters_rest_api_exceptions] do Perfmatters. O problema das 0 ferramentas no conector MCP do claude.ai foi resolvido com um snippet PHP no menu [Code] do Perfmatters, deixando só o caminho do MCP como exceção.
add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
$exceptions[] = '/mcp/mcp-oauth-server';
return $exceptions;
});Mesmo depois da exceção, o próprio MCP bloqueia requisições sem token com a mensagem [MCP authentication required.] e uma resposta 401, enquanto /wp-json/wp/v2/users continua devolvendo a resposta 401 do Perfmatters.
[MCP authentication required.]
[Remove REST API Links], na mesma seção [Core], só remove o link api.w.org do cabeçalho da página e dos cabeçalhos de resposta; a WP REST API em si continua respondendo.
🔢 FAQ & conteúdo recomendado
MCP
WP Rocket MCP Server
Como conectar ferramentas de IA para limpar o cache e mudar configurações no lugar do painel.
Segurança
Wordfence vs iThemes Security
Uma comparação entre dois plugins de segurança que barram ataques de força bruta e malware.
ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.