Skip to content

feat: quota de abuse por fingerprint, não só por IP - #15

Merged
DenisCDev merged 3 commits into
mainfrom
feat/abuse-bot-engine
Sep 14, 2026
Merged

DenisCDev merged 3 commits into
mainfrom
feat/abuse-bot-engine

Conversation

@DenisCDev

Copy link
Copy Markdown
Owner

Quota de abuse por identidade composta (fingerprint TLS/HTTP + session/jwt), não só IP. Stuffing, enumeração e signup opt-in no TOML.

Score com razões enumeráveis. Challenge PoW só em browser; API com JWT não leva HTML. Sem MMDB o processo arranca. Sem ML no caminho quente.

Rotação de IP sozinha zerava a quota de stuffing se a identidade fosse só o endereço — o mesmo bot mudava de IP e continuava. A identidade agora soma hash do ClientHello (não JA4), nomes dos headers, sessão, jwt.sub e ASN opt-in; sem bloco abuse o site fica como hoje.

1. Fingerprint TLS é hash estável do ClientHello (versão + ciphers + compressão); Pingora 0.8.1 não expõe JA4.
2. Stuffing, enumeração, signup e recover por identidade composta; 20 POST /login 401 no mesmo fingerprint em IPs diferentes param no teto 10.
3. Score com razões enumeráveis no evento, sem senha; challenge none|pow|external só depois do limiar; JWT/JSON não levam HTML.
4. MMDB ausente deixa asn vazio e o processo arranca; falha de origin deixa de panicar com Retry is not decided.

Prova: cargo test --lib abuse (10 ok); cargo test --test abuse -- --test-threads=1 (6 ok); cargo clippy --all-targets -- -D warnings limpo.
O CI falhava no cargo fmt --check. Só formatação.
RUSTSEC-2025-0132 em maxminddb 0.25 (open_mmap unsound). Já líamos o MMDB para Vec, não mmap; o bump é o que o audit exige. Lookup passou a decode() do LookupResult.
@DenisCDev
DenisCDev merged commit 47ce9c7 into main Sep 14, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant