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, slugnexus-captcha-simple,is_core: true, categoria "security" (aba Segurança, íconeshield-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); geranoncecomrandom_bytes(16),exp = time() + ttl*60e devolveprompt,token,noncee horário de expiração.- Token auto-contido assinado — payload
a|op|b|answer|nonce|expassinado comhash_hmac('sha256', …)usando o segredo da sessão (csrf_token, comDB_PASScomo fallback); token =base64(payload|sig)— o valor esperado nunca é exposto sem verificação. - Verificação em 4 etapas (
captcha_simple_verify_answer) — (1) assinatura viahash_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_loginebefore_register(prioridade 5) invalidam$data['valid']com mensagem de erro em português quando o desafio falha;login_form_after_fieldseregister_form_after_fieldsinjetam 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_ipVARCHAR(45) suportando IPv4/IPv6,created_at,INDEX idx_ws_time), criada comCREATE TABLE IF NOT EXISTSna primeira verificação — seminstall.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_minutes1–30, padrão 5) e validação no save (ttl_minutesclampado, 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.jsonausente — 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_logscriada 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
/captchano chat para gerar/validar desafios manualmente.
Andamento no GitHub (issues)
Painel em tempo real com as issues mais recentes do repositório.
live feed
abrir issues no githubcarregando andamento...
não foi possivel carregar as issues agora. abra no github pelo link acima.
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
- PHP 8
- MySQL 8
- Alpine.js
- Tailwind CSS
- HMAC-SHA256
- Plugin NEXUS
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.