Imagem de capa do projeto: NEXUS Captcha Simples EM ANDAMENTO

Resumo técnico

Plugin NEXUS que protege os formulários de login e registro contra força bruta e spam com desafios matemáticos 100% self-hosted: cada visita gera uma operação de adição ou multiplicação assinada por HMAC-SHA256 em token base64 com expiração e anti-replay por nonce, verificada em 4 etapas antes da autenticação. Sem GD, sem APIs externas e sem chaves de terceiros — com auditoria de tentativas por IP e dashboard de estatísticas na aba Segurança.

Escopo executado

  • plugin.json: v1.0.0, slug nexus-captcha-simple, is_core: true, categoria "security" (aba Segurança, ícone shield-check).
  • Captcha matemático self-hosted — sem GD/Imagick (PHP 8.3 puro) e sem serviços externos, diferente dos irmãos google-recaptcha/hcaptcha: nenhuma chave de API de terceiros é necessária.
  • captcha_simple_generate_challenge — sorteia operação + ou × conforme config (operations): (2–20) + (1–20) ou (2–9) × (2–9); gera nonce com random_bytes(16), exp = time() + ttl*60 e devolve prompt, token, nonce e horário de expiração.
  • Token auto-contido assinado — payload a|op|b|answer|nonce|exp assinado com hash_hmac('sha256', …) usando o segredo da sessão (csrf_token, com DB_PASS como fallback); token = base64(payload|sig) — o valor esperado nunca é exposto sem verificação.
  • Verificação em 4 etapas (captcha_simple_verify_answer) — (1) assinatura via hash_equals (anti-tamper); (2) expiração (time() > exp); (3) anti-replay: nonce único registrado em $_SESSION['captcha_used_nonces'], reutilização rejeitada; (4) comparação da resposta numérica (string).
  • 4 hooks — before_login e before_register (prioridade 5) invalidam $data['valid'] com mensagem de erro em português quando o desafio falha; login_form_after_fields e register_form_after_fields injetam o widget no formulário.
  • Widget server-side — prompt visível, captcha-simple-token (hidden), captcha-simple-answer (input numérico obrigatório) e botão "Trocar" que recarrega o desafio via JS (nxRefreshCaptchaSimple → fetch('api.php?action=captcha_simple_challenge')).
  • Auditoria por IP — tabela nx_captcha_simple_logs (workspace_id, action_type, success, user_ip VARCHAR(45) suportando IPv4/IPv6, created_at, INDEX idx_ws_time), criada com CREATE TABLE IF NOT EXISTS na primeira verificação — sem install.sql; toda tentativa (sucesso ou bloqueio) é logada.
  • Config — settings_get_all()['security']['captcha_simple'] com defaults (enabled, enable_login, enable_register, operations 'add'|'all', ttl_minutes 1–30, padrão 5) e validação no save (ttl_minutes clampado, operações whitelist).
  • Stats — captcha_simple_get_stats: total, success, blocked, success_rate + últimos 20 logs do workspace.
  • API: 5 actions (captcha_simple_challenge, captcha_simple_verify, captcha_simple_settings_get, captcha_simple_settings_save, captcha_simple_stats_get).
  • UI Alpine.js (tab.php, 388 linhas) — tema esmeralda (emerald-600), badge Self-Hosted, aba Segurança; 3 sub-abas: Testar Desafio (simulador com token HMAC exibido em bloco mono, expiração e validação em tempo real com feedback), Histórico & Logs (4 KPI cards — Total Verificações, Sucessos, Bloqueios, Taxa de Sucesso — e tabela com Data/Hora, Origem/Ação, IP e badge Sucesso/Bloqueado), Configurações (toggles global/login/registro, operações e TTL com botão salvar).
  • Fastr: /captcha → captcha_simple_challenge.
  • Sem i18n (textos em português no tab.php), sem cron (cronjob.json ausente — on-demand) e sem dependências externas (zero chamadas de rede no fluxo de proteção).

Stack e ferramentas

  • PHP 8 (sem framework, zero GD/Imagick)
  • MySQL 8 (tabela nx_captcha_simple_logs criada sob demanda)
  • Alpine.js + Tailwind CSS (premium light, esmeralda)
  • HMAC-SHA256 (hash_hmac + hash_equals) com nonce anti-replay
  • Plugin NEXUS (PluginManager: tabs, filters, API actions, Fastr)

Tags operacionais

  • Captcha
  • HMAC
  • Anti-Spam
  • Anti-Brute Force
  • Security
  • Login
  • Registro
  • Plugin NEXUS

Resultado operacional

  • Proteção local de autenticação: login e registro exigem desafio matemático antes da validação — sem custo de API externa.
  • Anti-tamper + anti-replay + expiração: token assinado por HMAC-SHA256, nonce de uso único e TTL configurável (1–30 min).
  • Privacidade e portabilidade: zero dependências de rede/terceiros; funciona em qualquer servidor PHP 8 puro, mesmo sem extensões de imagem.
  • Visibilidade anti-abuso: auditoria completa por IP com KPIs (total, sucessos, bloqueios, taxa) e histórico dos últimos 20 eventos.
  • Controle fino: toggles por fluxo (login/registro), operações permitidas e validade do desafio.
  • Comando /captcha no chat para gerar/validar desafios manualmente.

Andamento no GitHub (issues)

Painel em tempo real com as issues mais recentes do repositório.

abertas (amostra): -- fechadas (amostra): -- base: -- ultimas issues

carregando andamento...

Resultados reais

Mecanismo autônomo e leve de proteção contra bots e abuso automatizado. Gera desafios matemáticos simples e temporizados no lado do servidor, garantindo segurança em formulários sem dependência de serviços externos pagos.

Arquitetura e organização

Execução e operação

O projeto segue fluxo reprodutível de execução com validação técnica em ambiente de produção/similar.

Screenshots

Falar sobre este projeto

Aplique este modelo no seu ambiente e acelere a entrega com consistência técnica.