WAF · Bot Score 1–99 · captcha 1-clique · fingerprint passivo · rate-limit configurável por chave · defesa anti-botnet distribuído · clearance na borda. Processo Node contínuo, com persistência remota que sobrevive a deploys.
Os motores ligados de fábrica — sem plugin, sem subir Redis, sem cartão.
Pontuação estilo Cloudflare Enterprise (1=bot certo, 99=humano) e categorias Akamai (verified_bot, impersonator, automation_tool, etc.).
SQLi · XSS · RCE · path-traversal · scanners (sqlmap, nikto, nuclei). Bloqueio automático na borda.
Janelas de taxa por IP e globais agregadas — fecha o gap do botnet distribuído.
Pega bot SEM JavaScript: completude de client-hints, ordem de header, JA3/JA4, mismatches platform/UA.
3 modos por chave: v3 robusto, v2 leve, invisível beta. Validação 100% servidor.
240 req/30s por IP (default sugerido), totalmente configurável. Escopo: por IP, por página ou global.
Mesma assinatura vinda de 6+ IPs em 30s → ban da assinatura. Botnet pequena não sustenta mais flood.
Pressão por IP cresce exponencialmente; reputação acumula e decai. IP hostil reincidente entra "no escuro".
Pega Puppeteer/Playwright/CDP e bot que imita humano (mouse linear, reação impossível, ritmo robótico).
Allowlist de Googlebot/Bingbot/Apple/etc. UA falso vindo de datacenter aleatório = impersonator → deny.
Middleware Express verifica clearance LOCAL por HMAC (zero rede). Bot bloqueado no SDK, origem nunca tocada.
Contas e chaves sobrevivem a deploy/spin-down via Gist · JSONBin · KV genérico (todos gratuitos).
Tela "Verificando seu navegador…" ao entrar: analisa o browser, libera o humano e mostra CAPTCHA se a verificação demorar ou ficar suspeita. Ligável por chave.
Na criação de conta, um código de 6 dígitos é enviado ao seu email (Gmail/SMTP) — ninguém entra sem ele.
Testados localmente (npm run test:advanced) com 60 bots em IPs residenciais e fingerprints reais.
| Nível | Exemplo | Como a ASO trata |
|---|---|---|
| 🤖 Naive | curl, python-requests, Go-http-client | deny UA de automação + ordem de header |
| 🥷 Basic-stealth | Chrome UA falso sem client-hints completos | denychallenge fingerprint passivo |
| 🎯 Humanizado | Headers perfeitos, IP residencial, sem JS | challenge obrigatório sem prova de browser real, vira caixa "sou humano" |
Cada camada falha cedo — bot ruim morre na L0/L1 e nem chega na L12.
Rate-limit por chave · global volumétrico agregado · signature distribuída · adaptive ban · IP reputation · honeypot.
WAF · volumétrico L4 · signature ban · micro-burst · rotação de fingerprint /24 · verified bots · datacenter ASN · coerência · fingerprint passivo · stealth · human-like.
Endpoint público: https://SEU-DOMINIO (troque pelo domínio do seu serviço)
Escolha modo + plano em 30s.
Pick: modo de captcha + rate-limit por chave.
SDK Express ou chamada direta ao /v3/verify.
Bots morrem, métricas no painel.
const asoEdge = require('./aso-edge');
const express = require('express');
const app = express();
app.use(asoEdge({
publicKey: process.env.ASO_PUBLIC_KEY, // pk_...
edgeKey: process.env.ASO_EDGE_KEY, // verifica clearance local (zero rede)
endpoint: 'https://SEU-DOMINIO',
mode: 'enforce', // 'enforce' | 'monitor'
}));
app.use(express.json());
app.post('/__aso_clear', asoEdge.clearanceRoute({
publicKey: process.env.ASO_PUBLIC_KEY,
endpoint: 'https://SEU-DOMINIO',
}));
app.get('/', (req, res) => res.send('protegido'));
app.listen(3000);
const r = await fetch('https://SEU-DOMINIO/v3/verify', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
key: process.env.ASO_PUBLIC_KEY,
remoteip: req.ip,
method: req.method, path: req.path,
headers: req.headers,
}),
});
const v = await r.json();
if (v.action === 'deny') return res.status(403).json({ blocked: v.reason });
if (v.action === 'challenge') return res.status(429).json({ challenge: true });
// allow → segue
Inclua os scripts a partir do domínio da ASO — o endpoint é resolvido sozinho (CORS liberado), sem "load failed".
<!-- captcha de 1 clique -->
<script src="https://SEU-DOMINIO/assets/widget.js"></script>
<div id="aso-box"></div>
<script>
AsoWidget.render('aso-box', { mode:'aso-captcha-v3', onPass:t => { /* libere o form */ } });
</script>
<!-- OU checado de navegador (tela "Verificando seu navegador…") -->
<script src="https://SEU-DOMINIO/assets/widget.js"></script>
<script src="https://SEU-DOMINIO/assets/browser-check.js"></script>
<script>
AsoBrowserCheck.guard({ key:'pk_...', captchaFallback:true, onPass:()=>{} });
</script>
Esta versão passou em todas as verificações de segurança internas.
Zero SQL (estado em memória + JSON). Inputs sanitizados em todos os endpoints. parseBody rejeita JSON inválido sem crash.
Sessões e PASS tokens assinados com HMAC-SHA256 + ASO_SIGNING_SECRET. Senhas em scrypt (N=16384). Comparação timingSafeEqual.
X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Referrer-Policy: no-referrer, Permissions-Policy restritiva, Cache-Control: no-store.
512KB hard-limit em server.js — qualquer POST gigante é abortado com 413 antes de alocar memória.
Sessão por HMAC (30 dias) + anti-replay no PASS token (nonce uso único) + clearance preso ao IP (cookie roubado de outro IP é rejeitado).
secretKey mostrada UMA vez na geração, guardada como hash scrypt. edgeKey derivada e sem acesso à conta — só verifica clearance.
serveStatic normaliza e verifica que o arquivo resolvido está DENTRO de /public — qualquer ../ retorna 403.
Acesso a /.env, /wp-admin, /phpmyadmin banem a ASSINATURA da request por 1h — botnet reproduzindo padrão entra "no escuro".
O middleware SDK fail-open se a ASO cair (não derruba seu site), mas o flush remoto é síncrono no SIGTERM (não perde o último estado em deploy).
Pague nada, pegue tudo.