PHP 8.2+

API & Function Reference

Referência completa das funções internas do SafeNode. Projetado para máxima performance em triagem de ameaças e gerenciamento de infraestrutura cloud.

Esta documentação cobre os principais métodos utilitários usados em todo o core do SafeNode, desde a conexão segura com o banco de dados até os motores de detecção em tempo real.

Quick Start

Proteção Básica
// 1. Aplicar headers de segurança
require_once 'includes/HVSecurityHeaders.php';
HVSecurityHeaders::apply();

// 2. Proteção completa com middleware
require_once 'includes/SafeNodeMiddleware.php';
SafeNodeMiddleware::protect();

// 3. Conectar ao banco
$db = getSafeNodeDatabase();

// 4. Validar input
$input = $_POST['data'] ?? '';
if (HVSecurityHeaders::detectAttack($input)) {
    http_response_code(403);
    exit;
}

// 5. Sanitizar antes de usar
$clean = HVSecurityHeaders::sanitizeInput($input);

Segurança

Headers HTTP, CSRF, XSS, SQL Injection, Rate Limiting, Threat Detection

Infraestrutura

Conexão PDO, Configuração, Base URL, Validação de Ambiente

Performance

Monitoramento, Métricas, Alertas, Logging, Cache

Infraestrutura Central

PDO|false getSafeNodeDatabase()

Inicializa a conexão PDO com o banco de dados configurado (safend). Usa caching estático interno para evitar múltiplas conexões. Retorna false em caso de erro.

Características: Conexão persistente, tratamento de exceções, timeout de 5 segundos, charset UTF-8MB4, prepared statements desabilitados por padrão.

Usage Example
$db = getSafeNodeDatabase();
if (!$db) {
    die("Erro ao conectar ao banco de dados");
}

$stmt = $db->prepare("SELECT * FROM traffic_logs WHERE ip_address = ?");
$stmt->execute([$_SERVER['REMOTE_ADDR']]);
$logs = $stmt->fetchAll();
bool safenodeDatabaseExists()

Verifica se o banco de dados safend existe e está acessível.

Usage Example
if (!safenodeDatabaseExists()) {
    error_log("Banco de dados safend não encontrado");
    // Criar banco ou exibir erro
}
string getSafeNodeBaseUrl()

Retorna a URL base do SafeNode detectada automaticamente do ambiente (HTTP_HOST, SERVER_NAME).

Usage Example
$baseUrl = getSafeNodeBaseUrl();
// Retorna: https://safenode.cloud ou http://localhost/safenode

Security Headers

void HVSecurityHeaders::apply()

Aplica todos os headers HTTP de segurança necessários: XSS Protection, Content-Type Options, Frame Options, CSP, HSTS (apenas HTTPS), Referrer Policy, Permissions Policy e Cache Control.

Usage Example
// No início do arquivo PHP
require_once 'includes/HVSecurityHeaders.php';
HVSecurityHeaders::apply();

// Headers aplicados automaticamente:
// - X-XSS-Protection: 1; mode=block
// - X-Content-Type-Options: nosniff
// - X-Frame-Options: DENY
// - Content-Security-Policy: ...
// - Strict-Transport-Security: ... (apenas HTTPS)
// - Referrer-Policy: strict-origin-when-cross-origin
// - Permissions-Policy: geolocation=(), microphone=(), camera=()
// - Cache-Control: no-store, no-cache, must-revalidate
array HVSecurityHeaders::sanitizeInput($input)

Sanitiza e valida input JSON ou arrays recursivamente. Remove caracteres de controle, limita tamanho de strings (10KB) e sanitiza chaves.

Usage Example
$rawInput = json_decode(file_get_contents('php://input'), true);
$clean = HVSecurityHeaders::sanitizeInput($rawInput);

// Remove caracteres de controle e limita tamanho
// Sanitiza chaves para permitir apenas alfanuméricos, underscore e hífen
bool HVSecurityHeaders::validatePayloadSize($maxSize = 10240)

Valida o tamanho do payload HTTP. Retorna false e envia HTTP 413 se exceder o limite (padrão: 10KB).

Usage Example
if (!HVSecurityHeaders::validatePayloadSize(5120)) {
    // Payload maior que 5KB - requisição rejeitada
    exit;
}
bool HVSecurityHeaders::validateApiKeyFormat($apiKey)

Valida formato de API key. Deve começar com sk_ e ter pelo menos 35 caracteres (hexadecimal após o prefixo).

Usage Example
$apiKey = $_POST['api_key'] ?? '';
if (!HVSecurityHeaders::validateApiKeyFormat($apiKey)) {
    http_response_code(400);
    echo json_encode(['error' => 'Formato de API key inválido']);
    exit;
}
bool HVSecurityHeaders::validateTokenFormat($token)

Valida formato de token. Deve ser hexadecimal de exatamente 64 caracteres.

void HVSecurityHeaders::logSecurityThreat($ipAddress, $attackType, $input, $userAgent = null, $referer = null, $siteId = null)

Registra ameaça detectada na tabela safenode_security_logs com todos os detalhes da requisição.

Usage Example
HVSecurityHeaders::logSecurityThreat(
    $_SERVER['REMOTE_ADDR'],
    'sql_injection',
    $maliciousInput,
    $_SERVER['HTTP_USER_AGENT'],
    $_SERVER['HTTP_REFERER'],
    $siteId
);

Detecção de Ameaças

string|null HVSecurityHeaders::detectAttack($input, $logToSecurityTable = true)

Analisa strings em busca de padrões de ataque: SQL Injection, XSS, Command Injection. Retorna o tipo da ameaça ('sql_injection', 'xss', 'command_injection') ou null se seguro.

Padrões detectados: UNION SELECT, INSERT INTO, DELETE FROM, DROP TABLE, OR 1=1, AND 1=1, comentários SQL (--, #, /* */), tags script, javascript:, eventos onerror/onload/onclick, iframes, eval(), base64_decode, comandos shell (ping, nslookup, whoami, etc).

Usage Example
$userInput = $_POST['search'] ?? '';

$threat = HVSecurityHeaders::detectAttack($userInput);
if ($threat) {
    http_response_code(403);
    echo json_encode([
        'error' => 'Ataque detectado: ' . $threat
    ]);
    exit;
}

// Input seguro, processar normalmente
processSearch($userInput);

Controle de Fluxo

bool HVSecurityHeaders::checkIpRateLimit($ipAddress, $maxRequests = 100, $windowSeconds = 60)

Implementa rate limiting distribuído baseado em IP usando banco de dados (com fallback para arquivo temporário). Retorna false se o limite foi excedido.

Funcionamento: Usa tabela safenode_hv_rate_limits para rastrear requisições por IP em janelas de tempo. Limpa automaticamente registros antigos. Se o banco não estiver disponível, usa arquivo temporário como fallback.

Usage Example
// Limitar a 30 requisições por minuto
$ip = $_SERVER['REMOTE_ADDR'];
if (!HVSecurityHeaders::checkIpRateLimit($ip, 30, 60)) {
    http_response_code(429);
    header('Retry-After: 60');
    echo json_encode([
        'error' => 'Rate limit excedido. Tente novamente em 60 segundos.'
    ]);
    exit;
}

// Requisição permitida, continuar processamento

Proteção CSRF

string CSRFProtection::generateToken()

Gera um novo token CSRF criptograficamente seguro (64 caracteres hex) e armazena na sessão com timestamp.

string CSRFProtection::getToken()

Obtém o token CSRF atual da sessão, ou gera um novo se não existir.

bool CSRFProtection::validateToken($token)

Valida o token CSRF usando comparação segura (hash_equals). Tokens expiram após 2 horas.

Usage Example
// No formulário
$token = CSRFProtection::getToken();
echo '';

// Na validação do POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $token = $_POST['csrf_token'] ?? '';
    if (!CSRFProtection::validateToken($token)) {
        http_response_code(403);
        die('Token CSRF inválido ou expirado');
    }
    // Processar formulário
}
string CSRFProtection::getTokenField()

Retorna HTML do campo hidden com o token CSRF já formatado e escapado.

Usage Example
echo '
'; echo CSRFProtection::getTokenField(); echo ''; echo '
';
bool CSRFProtection::validate()

Valida automaticamente o token de POST ou GET. Retorna false e envia HTTP 403 se inválido.

Sanitização de Input

string XSSProtection::escape(?string $string)

Escapa string para uso em HTML (htmlspecialchars com ENT_QUOTES e UTF-8).

Usage Example
$userInput = $_GET['name'] ?? '';
echo '
' . XSSProtection::escape($userInput) . '
';
string XSSProtection::escapeAttr(?string $string)

Escapa string para uso em atributos HTML.

string XSSProtection::escapeJS(?string $string)

Escapa string para uso em JavaScript (JSON encode).

string XSSProtection::sanitize(?string $string)

Sanitiza string removendo tags HTML e caracteres perigosos.

array XSSProtection::sanitizeArray(array $array)

Sanitiza array recursivamente aplicando sanitização em todos os valores string.

Validação de Dados

bool XSSProtection::email(string $email)

Valida formato de email usando filter_var com FILTER_VALIDATE_EMAIL.

bool XSSProtection::url(string $url)

Valida formato de URL.

bool XSSProtection::domain(string $domain)

Valida formato de domínio.

bool XSSProtection::string($value, int $min = 1, int $max = 255)

Valida string com tamanho mínimo e máximo.

bool XSSProtection::integer($value)

Valida se o valor é um inteiro.

Gerenciamento de Planos

array|null SubscriptionManager::getUserSubscription($userId)

Obtém a subscription ativa do usuário. Se não existir, cria automaticamente um free trial de 14 dias com 10.000 eventos.

Usage Example
$manager = new SubscriptionManager(getSafeNodeDatabase());
$subscription = $manager->getUserSubscription($userId);

if ($subscription) {
    echo "Plano: " . $subscription['plan_type'];
    echo "Eventos usados: " . $subscription['events_used'] . "/" . $subscription['events_limit'];
}
bool SubscriptionManager::canUseEvent($userId)

Verifica se o usuário pode usar um evento (tem cota disponível). Retorna false se a cota foi excedida ou a subscription está inativa.

Usage Example
$manager = new SubscriptionManager(getSafeNodeDatabase());

if (!$manager->canUseEvent($userId)) {
    http_response_code(402);
    echo json_encode(['error' => 'Cota de eventos excedida']);
    exit;
}

// Processar evento
processEvent();
$manager->incrementEvent($userId);
void SubscriptionManager::incrementEvent($userId)

Incrementa o contador de eventos usados do usuário.

array SubscriptionManager::getUsageStats($userId)

Retorna estatísticas de uso: eventos usados, limite, porcentagem, data de reset do ciclo.

array|null SubscriptionManager::createFreeTrial($userId)

Cria free trial de 14 dias com 10.000 eventos para o usuário.

Sistema de Pagamento

Visão Geral

O SafeNode oferece um sistema completo de pagamento integrado com a EFI Bank (Gerencianet), suportando pagamentos via PIX e Cartão de Crédito. O sistema é totalmente automatizado e seguro, garantindo uma experiência fluida para os usuários.

Métodos de Pagamento

PIX (Pagamento Instantâneo)

  • Pagamento instantâneo via QR Code ou código "Copia e Cola"
  • Confirmação automática via webhook da EFI Bank
  • Disponível 24/7, incluindo finais de semana e feriados
  • Download de comprovante em PDF após confirmação
  • Verificação automática de status a cada 5 segundos

Cartão de Crédito

  • Processamento seguro via tokenização (dados nunca armazenados)
  • Suporte a parcelamento em até 12x
  • Validação em tempo real de dados do cartão
  • Confirmação imediata após processamento
  • Proteção PCI-DSS através da EFI Bank

Fluxo de Pagamento PIX

  1. Seleção do Plano: Usuário escolhe um plano na página de checkout
  2. Criação da Cobrança: Sistema cria uma cobrança imediata na EFI Bank e gera um TXID único
  3. Geração do QR Code: Sistema exibe QR Code e código "Copia e Cola" para pagamento
  4. Pagamento pelo Usuário: Usuário escaneia o QR Code ou copia o código no app do banco
  5. Verificação Automática: Sistema verifica status a cada 5 segundos via polling
  6. Webhook (Opcional): EFI Bank envia notificação automática quando pagamento é confirmado
  7. Ativação do Plano: Sistema ativa automaticamente o plano do usuário
  8. Comprovante: Usuário pode baixar o comprovante em PDF

Fluxo de Pagamento Cartão de Crédito

  1. Preenchimento do Formulário: Usuário preenche dados do cartão (número, validade, CVV, nome, CPF)
  2. Tokenização: Dados do cartão são enviados para EFI Bank e convertidos em token seguro
  3. Processamento: Sistema processa o pagamento usando o token (dados originais nunca chegam ao servidor)
  4. Validação: EFI Bank valida o cartão e processa a cobrança
  5. Confirmação: Sistema recebe resposta e atualiza status do pagamento
  6. Ativação: Se aprovado, plano é ativado imediatamente

Status de Pagamento

PENDING: Aguardando pagamento
PROCESSING: Processando pagamento
COMPLETED: Pagamento confirmado e plano ativado
REJECTED: Pagamento rejeitado ou cancelado

Segurança e Privacidade

  • Dados Sensíveis: Dados de cartão nunca são armazenados no servidor SafeNode
  • Tokenização: Cartões são convertidos em tokens seguros pela EFI Bank
  • HTTPS: Todas as comunicações são criptografadas via SSL/TLS
  • PCI-DSS: Conformidade garantida pela EFI Bank (nível 1)
  • Webhooks Seguros: Notificações da EFI são validadas antes de processar
  • Logs: Apenas IDs de transação são registrados, nunca dados sensíveis

Informações Técnicas

Identificadores

  • TXID: Identificador único da transação (gerado pelo SafeNode)
  • LOC ID: Identificador da localização do QR Code PIX (gerado pela EFI)
  • End-to-End ID: Identificador único do PIX confirmado (gerado pelo Banco Central)
  • Charge ID: Identificador da cobrança de cartão (gerado pela EFI)

APIs Utilizadas

  • /api/payment-status.php - Verificar status de pagamento
  • /api/process-credit-card.php - Processar pagamento com cartão
  • /api/tokenize-card.php - Tokenizar dados do cartão
  • /api/download-receipt.php - Baixar comprovante PIX em PDF
  • /api/efi-webhook.php - Receber notificações da EFI Bank

Cupons de Desconto

O sistema suporta cupons de desconto que podem ser aplicados durante o checkout:

  • Cupons podem ter desconto percentual ou valor fixo
  • Validade configurável (data de expiração)
  • Limite de uso por usuário ou global
  • Aplicável a planos específicos ou todos os planos
  • Rastreamento de uso e histórico

Troubleshooting

Pagamento PIX não confirma

  • Verifique se o QR Code não expirou (válido por 30 minutos)
  • Confirme se o valor pago corresponde exatamente ao valor da cobrança
  • O sistema verifica automaticamente a cada 5 segundos
  • Se persistir, entre em contato com o suporte

Cartão recusado

  • Verifique se os dados do cartão estão corretos
  • Confirme se há limite disponível no cartão
  • Entre em contato com o banco emissor do cartão
  • Tente novamente com outro cartão

OAuth Manager

string OAuthManager::generateAuthorizationCode($userId, $applicationId, $redirectUri, $scope, $state = null)

Gera código de autorização OAuth criptograficamente seguro (32 caracteres hex). Expira em 10 minutos. Verifica rate limiting antes de gerar.

Usage Example
$manager = new OAuthManager(getSafeNodeDatabase());
$code = $manager->generateAuthorizationCode(
    $userId,
    $appId,
    'https://app.com/callback',
    ['read', 'write'],
    $state
);

// Redirecionar para redirect_uri?code=$code&state=$state
header("Location: $redirectUri?code=$code&state=$state");
array|null OAuthManager::exchangeCodeForToken($code, $clientId, $clientSecret, $redirectUri)

Troca código de autorização por access token JWT. Valida credenciais do cliente, código não usado, expiração e redirect URI.

Usage Example
$tokenData = $manager->exchangeCodeForToken(
    $_GET['code'],
    $_POST['client_id'],
    $_POST['client_secret'],
    $_POST['redirect_uri']
);

if ($tokenData) {
    echo json_encode([
        'access_token' => $tokenData['access_token'],
        'token_type' => 'Bearer',
        'expires_in' => 3600,
        'scope' => $tokenData['scope']
    ]);
}
array|null OAuthManager::validateToken($token)

Valida e decodifica token JWT. Retorna dados do usuário e escopos se válido.

array OAuthManager::getUserInfo($token, $requestedScopes = [])

Retorna informações do usuário baseado no token e escopos solicitados.

Gerenciamento de API Keys

array|null HVAPIKeyManager::generateKey(int $userId, string $name = 'Verificação Humana', ?string $allowedDomains = null, ?int $rateLimit = null, ?int $maxTokenAge = null, string $sdkLanguage = 'javascript')

Gera nova API key para Human Verification. Retorna array com api_key (sk_...), api_secret, e configurações.

Usage Example
$keyData = HVAPIKeyManager::generateKey(
    $userId,
    'Meu App',
    'https://meusite.com',
    60, // 60 requisições/minuto
    3600, // Token expira em 1 hora
    'javascript'
);

// $keyData['api_key'] = 'sk_abc123...'
// $keyData['api_secret'] = 'def456...'
array|null HVAPIKeyManager::validateKey(string $apiKey, ?string $origin = null)

Valida API key e verifica se o domínio de origem está permitido. Retorna dados da key se válida.

array HVAPIKeyManager::checkRateLimit(int $apiKeyId, string $ipAddress)

Verifica rate limit para API key e IP. Retorna array com allowed (bool) e remaining.

array HVAPIKeyManager::getAllStats(int $apiKeyId, int $userId, ?string $period = '24h')

Retorna estatísticas completas: uso, performance, geolocalização para o período especificado (24h, 7d, 30d).

string HVAPIKeyManager::generateEmbedCode(string $apiKey, string $baseUrl, string $language = 'javascript')

Gera código de integração para JavaScript, React, Vue, Node.js, PHP ou Python.

Performance Monitor

void PerformanceMonitor::start($endpoint = null, $requestMethod = 'GET')

Inicia monitoramento de performance. Registra tempo inicial, memória e endpoint.

array PerformanceMonitor::end()

Finaliza monitoramento e retorna métricas: tempo de resposta, uso de memória, endpoint. Salva no banco se siteId configurado.

Usage Example
$monitor = new PerformanceMonitor(getSafeNodeDatabase(), $siteId);
$monitor->start('/api/endpoint', 'POST');

// Processar requisição
processRequest();

$metrics = $monitor->end();
// $metrics['response_time'] = 0.234
// $metrics['memory_usage'] = 1024000
// $metrics['endpoint'] = '/api/endpoint'
mixed PerformanceMonitor::measure($operation, callable $callback)

Executa callback e mede tempo de execução da operação específica.

Alert Manager

int|false AlertManager::createAlert($siteId, $alertType, $severity, $title, $message, $data = null)

Cria alerta no sistema. Verifica preferências do usuário antes de enviar notificações. Tipos: attack_detected, rate_limit_exceeded, system_error, etc.

Usage Example
$alertManager = new AlertManager(getSafeNodeDatabase());
$alertId = $alertManager->createAlert(
    $siteId,
    'attack_detected',
    'high',
    'SQL Injection Detectado',
    'Tentativa de SQL injection detectada do IP ' . $_SERVER['REMOTE_ADDR'],
    ['ip' => $_SERVER['REMOTE_ADDR'], 'attack_type' => 'sql_injection']
);
int AlertManager::getUnreadCount($siteId = null, $userId = null)

Retorna contagem de alertas não lidos para o site/usuário.

SafeNode Middleware

void SafeNodeMiddleware::protect()

Middleware completo de proteção. Identifica site, verifica status, aplica firewall, geo-blocking, rate limiting e human verification quando necessário.

Funcionalidades: Identificação automática de site, verificação de status ativo, detecção de país por IP, bloqueio geográfico, regras de firewall, rate limiting, desafio humano quando necessário, logging de ameaças.

Usage Example
// No início do arquivo PHP que precisa de proteção
require_once 'includes/SafeNodeMiddleware.php';

// Aplica todas as proteções automaticamente
SafeNodeMiddleware::protect();

// Se passar por todas as verificações, continua execução normal
// Se bloqueado, envia resposta HTTP apropriada e termina execução

UI Helpers

void includeThemeAssets()

Inclui automaticamente todos os assets do tema (CSS, JS, fonts) necessários para o funcionamento da interface.

Usage Example
require_once 'includes/theme-helper.php';
includeThemeAssets();
string renderThemeToggle()

Renderiza botão de alternância entre tema claro/escuro com funcionalidade JavaScript integrada.

Boas Práticas

Segurança

  • Sempre use HVSecurityHeaders::apply() no início de arquivos PHP públicos
  • Valide e sanitize todos os inputs do usuário antes de processar
  • Use CSRFProtection em todos os formulários
  • Implemente rate limiting em endpoints sensíveis
  • Monitore e logue todas as ameaças detectadas

Performance

  • Use getSafeNodeDatabase() que já implementa caching de conexão
  • Monitore performance de endpoints críticos com PerformanceMonitor
  • Configure rate limits apropriados para evitar abuso
  • Use prepared statements para todas as queries SQL

Integração

  • Use SafeNodeMiddleware::protect() para proteção completa automática
  • Verifique cotas de eventos antes de processar requisições pesadas
  • Configure alertas para eventos importantes
  • Valide API keys antes de processar requisições de terceiros