WP Manifestindependent plugin directory
manifest / developer / wp-system-rest-api

WP System REST API WP Registry grade C-. High-severity findings · 1 findingWP RegistryHigh-severity findings · 1 findingOpen the reportC-

Exibe informações do sistema WordPress via REST API protegida por autenticação

★ 1stars
15release downloads
v0.4.3latest · 3mo ago

Install

Download wp-system-rest-api.zip From the v0.4.3 release on GitHub, Jul 12, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/brunoalbim/wp-system-rest-api/releases/download/v0.4.3/wp-system-rest-api.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

Plugin WordPress que expõe informações do sistema via REST API protegida por autenticação.

📋 Descrição

Expõe informações do sistema WordPress via REST API protegida por autenticação. Inclui integração com UpdraftPlus para visibilidade de backups.

  • Versão do WordPress
  • Versão do PHP
  • Tema ativo (com informações de atualização)
  • Lista completa de plugins instalados (ativos e inativos)
  • Status de atualizações disponíveis
  • Dados de backups do Updraft

✨ Características

  • Seguro: Protegido por autenticação usando Application Passwords (Senhas de Aplicação)
  • Completo: Retorna todos os dados em um único payload JSON
  • Informativo: Inclui informações sobre atualizações disponíveis
  • Simples: Implementação direta e fácil de usar
  • Robusto: Tratamento de erros adequado e código bem documentado

🚀 Instalação

Método 1: Upload Manual

  1. Baixe o arquivo "wp-system-rest-api.zip" mais recente em https://github.com/brunoalbim/wp-system-rest-api/releases
  2. Acesse o painel administrativo do WordPress
  3. Vá em Plugins > Adicionar novo > Fazer upload do plugin
  4. Selecione o arquivo e clique em Instalar agora
  5. Ative o plugin

🔐 Configuração de Autenticação

O plugin utiliza o sistema nativo de Application Passwords (Senhas de Aplicação) do WordPress.

Criando uma Application Password

  1. Acesse o painel administrativo do WordPress
  2. Vá em Usuários > Perfil
  3. Role até a seção Senhas de aplicação (Application Passwords)
  4. Digite um nome para a aplicação (ex: "API Client")
  5. Clique em Adicionar nova senha de aplicação
  6. Importante: Copie a senha gerada imediatamente (ela não será exibida novamente)

📡 Uso da API

Endpoint info do sistema

GET /wp-json/wp-system/v1/info

Endpoint Updraft

GET /wp-json/wp-system/v1/backup

Autenticação

Use HTTP Basic Authentication com suas credenciais WordPress e a Application Password:

  • Username: Seu nome de usuário WordPress
  • Password: A Application Password gerada

Exemplos de Requisições

cURL

curl -X GET https://seu-site.com/wp-json/wp-system/v1/info \
  -u "seu-usuario:xxxx xxxx xxxx xxxx xxxx xxxx"

cURL com cabeçalho Authorization

# Codifique suas credenciais em Base64
# Formato: usuario:senha
echo -n "seu-usuario:xxxx xxxx xxxx xxxx xxxx xxxx" | base64

# Use o resultado na requisição
curl -X GET https://seu-site.com/wp-json/wp-system/v1/info \
  -H "Authorization: Basic SEU_TOKEN_BASE64_AQUI"

JavaScript (Fetch API)

const username = 'seu-usuario';
const password = 'xxxx xxxx xxxx xxxx xxxx xxxx';
const credentials = btoa(`${username}:${password}`);

fetch('https://seu-site.com/wp-json/wp-system/v1/info', {
  method: 'GET',
  headers: {
    'Authorization': `Basic ${credentials}`,
    'Content-Type': 'application/json'
  }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Erro:', error));

JavaScript (Axios)

const axios = require('axios');

axios.get('https://seu-site.com/wp-json/wp-system/v1/info', {
  auth: {
    username: 'seu-usuario',
    password: 'xxxx xxxx xxxx xxxx xxxx xxxx'
  }
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error('Erro:', error.response?.data || error.message);
});

Python (Requests)

import requests
from requests.auth import HTTPBasicAuth

url = 'https://seu-site.com/wp-json/wp-system/v1/info'
username = 'seu-usuario'
password = 'xxxx xxxx xxxx xxxx xxxx xxxx'

response = requests.get(url, auth=HTTPBasicAuth(username, password))

if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print(f"Erro: {response.status_code}")
    print(response.json())

PHP

<?php
$url = 'https://seu-site.com/wp-json/wp-system/v1/info';
$username = 'seu-usuario';
$password = 'xxxx xxxx xxxx xxxx xxxx xxxx';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_code === 200) {
    $data = json_decode($response, true);
    print_r($data);
} else {
    echo "Erro: $http_code\n";
    print_r(json_decode($response, true));
}
?>

📦 Estrutura da Resposta

Resposta de Sucesso (200 OK)

{
  "wordpress_version": {
    "version": "6.4.2",
    "update_available": false,
    "latest_version": "6.4.2"
  },
  "php_version": "8.2.0",
  "theme": {
    "name": "Twenty Twenty-Four",
    "version": "1.0",
    "update_available": false,
    "latest_version": "1.0",
    "author": "the WordPress team",
    "template": "twentytwentyfour",
    "stylesheet": "twentytwentyfour"
  },
  "plugins": [
    {
      "name": "Akismet Anti-spam: Spam Protection",
      "version": "5.3",
      "active": true,
      "update_available": true,
      "latest_version": "5.3.1",
      "author": "Automattic - Anti-spam Team",
      "description": "Protect your site from spam in comments and contact forms.",
      "plugin_uri": "https://akismet.com/"
    },
    {
      "name": "Hello Dolly",
      "version": "1.7.2",
      "active": false,
      "update_available": false,
      "latest_version": "1.7.2",
      "author": "Matt Mullenweg",
      "description": "This is not just a plugin, it symbolizes the hope and enthusiasm...",
      "plugin_uri": "http://wordpress.org/plugins/hello-dolly/"
    }
  ],
  "timestamp": "2024-01-15 10:30:45",
  "timestamp_gmt": "2024-01-15 13:30:45"
}

Respostas de Erro

401 Unauthorized (Não autenticado)

{
  "code": "rest_forbidden",
  "message": "Você precisa estar autenticado para acessar este endpoint.",
  "data": {
    "status": 401
  }
}

403 Forbidden (Sem permissão)

{
  "code": "rest_forbidden",
  "message": "Você não tem permissão para acessar este recurso.",
  "data": {
    "status": 403
  }
}

500 Internal Server Error

{
  "code": "system_info_error",
  "message": "Erro ao coletar informações do sistema: [detalhes do erro]",
  "data": {
    "status": 500
  }
}

🔍 Campos da Resposta

Campos Principais

Campo Tipo Descrição
wordpress_version object Informações da versão do WordPress
php_version string Versão do PHP do servidor
theme object Informações do tema ativo
plugins array Lista de todos os plugins instalados
timestamp string Data/hora da requisição (timezone do sit

Objeto WordPress Version

Campo Tipo Descrição
version string Versão atual instalada do WordPress
update_available boolean Se há atualização disponível
latest_version string Versão mais recente disponível

Objeto Theme

Campo Tipo Descrição
name string Nome do tema
version string Versão atual instalada
update_available boolean Se há atualização disponível
latest_version string Versão mais recente disponível
author string Autor do tema
template string Diretório do tema template
stylesheet string Diretório do tema stylesheet

Objeto Plugin (item do array plugins)

Campo Tipo Descrição
name string Nome do plugin
version string Versão atual instalada
active boolean Se o plugin está ativo
update_available boolean Se há atualização disponível
latest_version string Versão mais recente disponível
author string Autor do plugin
description string Descrição do plugin
plugin_uri string URL do site do plugin

🔄 Atualizações

O plugin verifica automaticamente por novas versões usando as Releases do GitHub como fonte, via Plugin Update Checker. Quando uma nova versão é publicada, ela aparece na tela Plugins do wp-admin como qualquer outra atualização, com botão Atualizar agora.

Como publicar uma nova versão (para mantenedores)

A criação da tag e da release é automática — basta subir a versão no código:

  1. Atualize o campo Version: no header de wp-system-rest-api.php.
  2. Faça commit da alteração e dê push na main.
  3. O workflow .github/workflows/release.yml detecta que o Version: mudou, cria e envia a tag vX.Y.Z correspondente, monta o .zip com a estrutura correta e publica a GitHub Release com o pacote anexado — tudo no mesmo job.
  4. Sites com o plugin instalado passarão a ver a atualização no wp-admin (o WordPress verifica periodicamente; para forçar, use "Verificar novamente" na tela de Plugins/Updates).

Não é necessário criar ou enviar a tag manualmente — apenas garanta que o Version: do header esteja correto antes do commit.

📝 Licença

Este plugin é licenciado sob a GPL v2 ou posterior.

👨‍💻 Autor

Bruno Albim

🤝 Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.

  • Implementação do endpoint /wp-json/wp-system/v1/info
  • Suporte a Application Passwords
  • Informações de WordPress, PHP, tema e plugins
  • Detecção de atualizações disponíveis para temas e plugins

Releases

4 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v0.4.3 latest
Jul 12, 2026 3mo ago
wp-system-rest-api.zip
12
Jul 12, 2026 3mo ago
wp-system-rest-api.zip
1
Jul 12, 2026 3mo ago
wp-system-rest-api.zip
2
Apr 24, 2026 6mo ago
tag only
—
C- grade

Security

WP System REST API 0.4.3 · audited by WP Registry

High-severity findings.

1 high
Audited release
0.4.3
Findings
1
Worst severity
high
Content hash
602cc439f3041612f3cc5d43…

Findings

  • high System and backup REST endpoints over-permissive (read capability)

    missing_capability

    check_permission only requires a logged-in user with capability read. Subscribers can call /info (WP/PHP/theme/plugin inventory) and /backup (UpdraftPlus history, schedule, S3 path). This is sensitive operational data that should require manage_options (or a dedicated capability).

    wp-system-rest-api.php:64-96

    Recommendation

    Use current_user_can('manage_options') or a custom capability. Avoid exposing backup storage paths to low-privilege roles.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.