Troubleshooting: Funnel Shield
Troubleshooting: Funnel Shield
Funnel Shieldé um sistema de proteção server-to-server que valida tráfego legítimo usando tokens HMAC. Este guia cobre os problemas mais comuns e suas soluções.
Índice
Visão Geral
Como funciona o Funnel Shield?
Instalação: Você instala o arquivo
aprovei-funnel-shield.phpno seu servidorToken Generation: O sistema gera um token único HMAC-assinado
Validação: O SDK valida o token server-to-server com a API da Aprovei
Fingerprint: Usa IP + User-Agent + Accept-Language para prevenir replay attacks
Cache: Cache local (30 min) + cache remoto de tentativas negativas (60s)
Fluxo de validação
Request → Cookie HMAC válido?
↓ Não
Token na query string (?_flshield=TOKEN)
↓ Sim
Valida token via API /api/funnel-shield/verify
↓ Sucesso
Define cookies + redireciona para URL limpa
↓ Falha
Redireciona para FALLBACK_URLErros Comuns
1. Placeholder não substituído
Sintoma: Log mostra "APROVEI_SECRET nao configurado" ou similar
Causa: O arquivo PHP foi baixado mas as variáveis {{CAMPAIGN_ID}}, {{VERIFY_URL}}, etc. não foram substituídas
Solução:
Acesse o painel da campanha
Vá em "Funnel Shield"
Baixe novamente o arquivo PHP
Verifique se as constantes estão preenchidas:
define('APROVEI_CAMPAIGN_ID', 'cmp_123abc'); // ← ID visível define('APROVEI_VERIFY_URL', 'https://api.aprv-edge.com/api/funnel-shield/verify'); define('APROVEI_SECRET', 'base64encodedsecret...');
2. Token expirado
Sintoma: Usuário é redirecionado para fallback mesmo com token válido na URL
Causa: Tokens têm TTL curto (configurado na geração) e expiram após o período
Solução:
Tokens one-shot são descartáveis após uso
Se o usuário tentar reutilizar o mesmo token, será rejeitado
Gere um novo token quando necessário
Log de violação: reason: "expired"
3. Fingerprint mismatch
Sintoma: Token válido mas validação falha com erro de fingerprint
Causa: O fingerprint (hash de IP+UA+Accept-Language) mudou entre geração e validação
Cenários comuns:
Usuário acessou de VPN e depois desconectou
Mudança de IP (ex: WiFi → 4G)
User-Agent mudou (update de browser)
Diferença de IP entre proxy e origem
Solução:
O fingerprint usa IP anonimizado (/24 para IPv4, /48 para IPv6)
Pequenas variações de IP são toleradas
Se problema persiste, verifique configuração de proxy/reverse proxy
Log de violação: reason: "fingerprint_mismatch"
4. Replay attack detectado
Sintoma: Segunda tentativa com mesmo token é rejeitada
Causa: Token já foi usado anteriormente (proteção contra replay)
Solução:
Design one-shot: tokens só podem ser usados uma vez
Cada acesso requer um novo token
Não há como reutilizar tokens
Log de violação: reason: "replay"
5. Assinatura inválida
Sintoma: Erro de validação de assinatura HMAC
Causa:
Secret da campanha mudou (rotação)
Arquivo PHP desatualizado com secret antigo
Token manipulado/alterado
Solução:
Baixe novamente o arquivo PHP após rotação de secret
O sistema suporta duas secrets simultâneas (atual + anterior) para transição suave
Não edite manualmente o token
Log de violação: reason: "invalid_signature"
6. Erro de curl/rede
Sintoma: Todas as validações falham, logs de debug mostram erro curl
Causa:
curl não disponível no PHP
Firewall bloqueando request para API
Timeout de conexão
DNS falhando
Solução:
# Verificar se curl está habilitado
php -i | grep curl
# Testar conectividade
curl -v https://api.aprv-edge.com/api/funnel-shield/verify
# Verificar permissões do diretório de cache
ls -la .aprovei-cache/
# Deve ser gravável pelo usuário do PHP (chmod 0700)Log de debug: "curl erro N" onde N é o código de erro curl
7. Permissões de diretório
Sintoma: Erro ao criar cache ou logs de debug
Causa: Diretório .aprovei-cache/ não pode ser criado/escrito
Solução:
# Criar manualmente com permissões corretas
mkdir -p .aprovei-cache
chmod 0700 .aprovei-cache
chown www-data:www-data .aprovei-cache # ajuste para seu usuário PHP8. Token inválido/malformado
Sintoma: Erro "invalid" na resposta da API
Causa:
Token corrompido na URL (encoding errado)
Token incompleto
Query string malformada
Solução:
Token deve conter 3 partes separadas por
.:payload.signature.nonceUse
urlencode()ao montar URLs em PHP
Log de violação: reason: "invalid_token"
9. Subscription inactive
Sintoma: API retorna {"error": "subscription_inactive"}
Causa: Assinatura do usuário não está ativa ou em grace period
Solução:
Verifique status da assinatura no painel
Planos inativos não podem validar tokens Funnel Shield
Renove ou atualize o plano para reativar
Debug Mode
Para ativar logs detalhados, adicione antes do require_once:
<?php
define('APROVEI_DEBUG_LOG', true);
require_once __DIR__ . '/aprovei-funnel-shield.php';Isso criará um arquivo ./.aprovei-funnel-shield.log com mensagens como:
2026-04-27T10:30:45+00:00 Token validado com sucesso
2026-04-27T10:30:46+00:00 curl erro 7
2026-04-27T10:30:47+00:00 APROVEI_SECRET nao configurado⚠️ IMPORTANTE: Desative debug em produção após diagnóstico!
Logs de Violação
O sistema registra automaticamente todas as tentativas falhas de validação em funnel_shield_violations.
Campos registrados:
campaign_id— ID da campanhaip— IP de origemua— User-Agent (truncado em 512 chars)reason— Motivo da falha (expired, invalid_signature, replay, fingerprint_mismatch, invalid_token, unknown)asn— ASN (se disponível)country— País (se disponível)fingerprint— Hash de identificaçãocreated_at— Timestamp
Como consultar
Via painel admin:
Acesse
/admin/funnel-shieldFiltre por campanha, reason ou data
Via SQL:
SELECT
reason,
COUNT(*) as total,
country,
asn
FROM funnel_shield_violations
WHERE campaign_id = 'cmp_123abc'
AND created_at > NOW() - INTERVAL '7 days'
GROUP BY reason, country, asn
ORDER BY total DESC;FAQ
Token Funnel Shield expira?
Sim. O TTL é definido na geração do token (geralmente curto para segurança). Tokens one-shot são invalidados após primeiro uso.
Posso reutilizar um token?
Não. Funnel Shield usa design one-shot: cada token só pode ser validado uma vez. Segundas tentativas retornam replay.
O cookie local substitui a validação remota?
Parcialmente. O cookie HMAC _aprovei_sess (30 min) evita round-trip para requests do mesmo fingerprint. Mudanças de IP/UA invalidam o cookie e forçam nova validação.
Funnel Shield funciona com Cloudflare?
Sim, desde que:
Cloudflare não altere headers críticos (User-Agent, Accept-Language)
IP original seja preservado (CF-Connecting-IP header)
Cache esteja desabilitado para rotas protegidas
Posso usar múltiplos arquivos Funnel Shield?
Sim, mas use diretórios separados:
site1.com/.htaccess→require_once __DIR__ . '/fp-site1/aprovei-funnel-shield.php';site2.com/.htaccess→require_once __DIR__ . '/fp-site2/aprovei-funnel-shield.php';
O filename de download é sempre aprovei-funnel-shield.php. Renomeie ao organizar.
O fallback URL é obrigatório?
Sim. Fail-closed design: qualquer falha redireciona para APROVEI_FALLBACK. Configure uma URL segura (página de "em manutenção", offer pública, etc.).
Suporte
Se após este guia o problema persistir:
Ative debug mode e compartilhe os logs
Consulte os logs de violação no painel admin
Verifique status da assinatura
Entre em contato via suporte Aprovei
Última atualização: Abril 2026
Versão do SDK: 2.x
Produto: Aprovei Shadow
