A REST API do WordPress é uma interface integrada que permite que aplicações externas, frontends baseados em JavaScript, aplicativos móveis e serviços de terceiros se comuniquem com o seu site WordPress usando requisições HTTP padrão e dados em JSON. Ela foi incorporada ao núcleo do WordPress na versão 4.7 (dezembro de 2016) e desde então se tornou a espinha dorsal do desenvolvimento moderno em WordPress, alimentando desde o editor de blocos Gutenberg até arquiteturas headless.
Antes da REST API existir, a única forma programática de interagir com o WordPress de fora era pelo XML-RPC, um protocolo mais antigo e bem mais limitado. A REST API substituiu essa abordagem por algo muito mais flexível, mas também introduziu novas considerações de segurança que todo proprietário de site WordPress deveria entender.
Endpoints padrão e o que eles expõem
A REST API fica em /wp-json/wp/v2/ em toda instalação do WordPress. De fábrica, ela expõe uma ampla gama de endpoints:
/wp-json/wp/v2/posts: retorna todos os posts publicados com seu conteúdo completo, IDs de autor, categorias, tags e referências de imagem destacada./wp-json/wp/v2/pages: o mesmo que posts, mas para páginas estáticas./wp-json/wp/v2/users: lista todos os usuários que publicaram pelo menos um post. É o endpoint padrão mais sensível em termos de segurança./wp-json/wp/v2/categoriese/wp-json/wp/v2/tags: retornam termos de taxonomia com descrições e contagens de posts./wp-json/wp/v2/comments: lista comentários públicos, incluindo nomes dos comentaristas e, às vezes, endereços de e-mail se o site estiver mal configurado./wp-json/wp/v2/media: lista arquivos de mídia enviados com suas URLs, dimensões e metadados./wp-json/wp/v2/search: fornece um endpoint de busca que espelha a busca interna do site./wp-json/(a raiz): retorna um índice completo de todos os namespaces e rotas registrados na API, revelando efetivamente todo plugin que registra seus próprios endpoints.
Plugins frequentemente adicionam seus próprios namespaces. O WooCommerce adiciona /wp-json/wc/v3/, o Yoast SEO adiciona endpoints sob seu namespace e plugins de formulário de contato podem expor endpoints de envio. O índice raiz da API revela todos eles, dando ao atacante uma visão clara de quais plugins estão instalados.
O risco de enumeração de usuários
O endpoint /wp-json/wp/v2/users é a preocupação de segurança mais discutida sobre a REST API. Por padrão, qualquer pessoa pode visitar esse endpoint e obter uma resposta JSON listando todos os usuários que tenham autoria de conteúdo. Cada entrada de usuário inclui o nome de usuário (o campo slug), o nome de exibição, o ID do usuário, a URL do avatar e um link para o arquivo do autor.
Por que isso importa? Porque nomes de usuário são metade da equação de login. Se um atacante sabe que sua conta de admin usa o nome sarah_admin, ele só precisa adivinhar (ou tentar por força bruta) a senha. Sem a REST API, encontrar nomes de usuário exigia mais esforço, como adivinhar URLs de arquivos de autor como /?author=1. A REST API entrega essa informação livremente em formato estruturado e legível por máquina.
Não é uma preocupação teórica. Bots automatizados rotineiramente raspam /wp-json/wp/v2/users em sites WordPress para construir listas de alvos para credential stuffing e ataques de força bruta. Se o seu site tem um usuário chamado admin, essa conta será a primeira alvo.
Métodos de autenticação para a REST API
Requisições não autenticadas à REST API só retornam dados publicamente disponíveis (posts publicados, perfis públicos de usuários etc.). Para criar, atualizar ou excluir conteúdo via API, é preciso autenticar. O WordPress suporta vários métodos:
- Autenticação por cookie: é o que o editor Gutenberg usa. Quando você está logado no WordPress, seu navegador envia cookies de sessão a cada requisição da API. Um valor nonce previne cross-site request forgery. Esse método só funciona dentro do contexto do navegador.
- Application Passwords: introduzidas no WordPress 5.6, esse recurso permite gerar senhas únicas para cada aplicação que precisa de acesso à API. Cada application password é vinculada a uma conta de usuário específica. Você pode revogá-las individualmente sem alterar sua senha principal. São enviadas via HTTP Basic Auth e só funcionam sobre HTTPS.
- JWT (JSON Web Tokens): não embutido no núcleo do WordPress, mas disponível por meio de plugins como "JWT Authentication for WP REST API". JWT é popular em configurações headless onde uma aplicação frontend precisa autenticar usuários e fazer chamadas de API em seu nome.
- OAuth: também disponível por plugins. OAuth é o método preferido quando aplicações de terceiros precisam acessar a API do seu site em nome dos seus usuários, pois evita o compartilhamento direto de senhas.
Quando você realmente precisa da REST API
A REST API não é um recurso opcional que se possa desligar de qualquer jeito. Ela está profundamente integrada ao núcleo do WordPress e muitos plugins dependem dela:
- Editor de blocos Gutenberg: toda a experiência de edição depende da REST API. Toda vez que você cria, salva ou pré-visualiza um post no editor de blocos, ele se comunica com a REST API. Desabilitá-la forçaria você a voltar ao Classic Editor.
- WordPress headless: se você usa o WordPress como backend de gestão de conteúdo com um frontend separado feito em React, Vue, Next.js ou Nuxt, a REST API (ou sua contraparte mais nova, WPGraphQL) é como o frontend recupera o conteúdo.
- Aplicativos móveis: o aplicativo móvel oficial do WordPress se comunica com seu site pela REST API. Muitos apps personalizados para sites de associação, plataformas de aprendizado ou veículos de notícias também a usam.
- Funcionalidade de plugins: muitos plugins modernos dependem da REST API para suas interfaces administrativas. Plugins que usam React ou Vue para suas páginas de configurações fazem chamadas de API por trás dos panos. WooCommerce, Jetpack, Yoast SEO e dezenas de outros quebrariam sem ela.
- Integrações de terceiros: Zapier, IFTTT e ferramentas de automação similares podem interagir com seu site WordPress via REST API, possibilitando fluxos de trabalho como criar posts automaticamente a partir de envios de formulário ou sincronizar conteúdo entre plataformas.
Hardening de segurança sem quebrar nada
A abordagem correta não é desabilitar a REST API por completo, mas restringir as partes que expõem informações sensíveis. Aqui estão passos práticos:
- Restrinja o endpoint de usuários: exija autenticação para
/wp/v2/users. Diversos plugins de segurança oferecem isso com um único toggle. Você também pode adicionar um snippet de código aofunctions.phpdo seu tema ou a um plugin personalizado que se conecte ao filtrorest_authentication_errorspara bloquear o acesso não autenticado a endpoints específicos. - Remova o link da REST API do HTML: o WordPress imprime uma tag
<link rel="https://api.w.org/">no head do HTML, anunciando a URL da API. Remover essa tag não desabilita a API, mas deixa de anunciar sua localização para scanners automatizados. - Desabilite o XML-RPC junto: se você está protegendo a REST API, desabilite também a interface mais antiga XML-RPC (
/xmlrpc.php), que tem seu próprio conjunto de vulnerabilidades de força bruta e DDoS. - Use um plugin de firewall: plugins como Wordfence, Sucuri ou iThemes Security podem limitar o acesso à API por endereço IP, bloquear bots maliciosos conhecidos e adicionar rate limiting para evitar abuso automatizado.
- Remova endpoints de plugins não usados: se um plugin registra rotas de API que você não precisa, você pode usar o filtro
rest_endpointspara removê-las. Isso reduz sua superfície de ataque e também previne vazamento de informação sobre quais plugins você tem instalados.
O que o InspectWP verifica
O InspectWP verifica se a REST API está publicamente acessível procurando pela tag <link rel="https://api.w.org/"> no código-fonte HTML do seu site. Também testa se o endpoint /wp-json/wp/v2/users retorna dados de usuários sem autenticação, o que indicaria um risco de enumeração de usuários. Se a tag de link da API estiver presente, o InspectWP relata a URL da REST API descoberta. Se dados de usuários estiverem expostos, isso é sinalizado como uma preocupação de segurança com a recomendação de restringir esse endpoint apenas a requisições autenticadas.