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

Aviso de afiliados v3.1
Aviso de afiliados v3.2 (somente celular)

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/users

2️⃣ Nomes de usuário expostos pelo wp-json

  • ↪️ Por que bloquear: users 401 · também aparece nas páginas de autor

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

  • ↪️ Salvar no editor de blocos · MCP com 0 ferramentas

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 loginSalvamento por contas não administradorasIndicado para
Default (Enabled)Nomes de usuário expostosSalva normalmente—
Disable for Non-Admins401Falha ao salvarSites sem contas de autor ou colaborador
Disable When Logged Out401Salva normalmenteSites 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)

  • ↪️ Onde configurar · conferir a resposta 401

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].

WordPress Settings → Perfmatters → General(WordPress REST API)
Perfmatters Disable REST API: Disable When Logged Out

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)

Perfmatters settings simulator: General → Core
Simulador de configurações do Perfmatters · Review · guia do Perfmatters

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.

🔌 Mesma requisição, duas respostas GET /wp-json/wp/v2/users
Site sem bloqueio
200
Até visitantes sem login conseguem ver os nomes de usuário.
[
  {
    "id": 1,
    "name": "User A",
    "slug": "user_a",
    "link": "https://example.com/author/user_a/"
  }
]
Site com [Disable When Logged Out]
401
Requisições sem login recebem uma resposta 401 com uma mensagem.
{
  "code": "rest_authentication_error",
  "message": "Sorry, you do not have permission to make REST API requests.",
  "data": { "status": 401 }
}
slug Por padrão, o slug traz o próprio nome de login.
À esquerda estão só quatro campos da resposta (id · name · slug · link), e o nome é um exemplo (user_a).


5️⃣ Exceções nos caminhos bloqueados

  • ↪️ Exceção para o caminho do MCP · diferença em relação a remover os links da REST API

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.

🚦 A ordem pela qual a requisição passa
Antes da exceção · requisição MCP
Requisição enviada pelo conector MCP do claude.ai depois da autenticação, com [Disable When Logged Out] ativo.
Perfmatters
Bloqueada com 401
→↓
Verificação do token MCP
Não alcançada
→↓
Resultado
0 ferramentas
Depois da exceção · requisição MCP
/mcp/mcp-oauth-server foi adicionado como caminho às exceções do Perfmatters.
Perfmatters
Passa por ser caminho de exceção
→↓
Verificação do token MCP
O próprio MCP verifica
→↓
Resultado
401 sem token
[MCP authentication required.]
Depois da exceção · /wp-json/wp/v2/users
Caminhos fora das exceções continuam bloqueados.
Perfmatters
Bloqueada com 401
→↓
Resultado
Nomes de usuário seguem ocultos
⚠️ O Perfmatters bloqueia a requisição antes de o MCP verificar o token.

[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

O xmlrpc.php é um endereço diferente da REST API, então continua respondendo mesmo com a REST API bloqueada. O site de teste registrou 734 requisições POST ao xmlrpc.php só em 8 de outubro de 2026, e no Perfmatters dá para bloqueá-lo com [Disable XML-RPC] na mesma seção [Core].

O WP Rocket mantém os endereços /wp-json/ na lista de exclusão do cache, então as respostas da REST API mudam assim que você salva. Configurações que alteram o HTML da página, como [Remove REST API Links], só aparecem depois de limpar o cache.

Não. O editor de blocos do WordPress envia requisições à REST API quando salva posts, e os conectores MCP que ligam ferramentas de IA como o claude.ai também usam caminhos em /wp-json/.

ℹ️ 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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 0   +   8   =