Segurança e confiança entre site e agente|INEMA.CLUB-PRO

Aula 6 · 18 min

Identificar quem chega: Web Bot Auth e signed agents (rascunho IETF)

User-Agent qualquer um escreve. Web Bot Auth é a proposta do IETF para o bot assinar cada pedido com uma chave publicada numa URL dele. Ainda é rascunho (-00, setembro de 2026). Nesta aula você confere uma assinatura contra o vetor do draft e vê num servidor local o que ela prova e o que não prova.

Começar a aula
Crachá metálico sem inscrição sobre teclado escuro, ao lado de um cabo de rede, luz neutra.

Nesta aula você vai

  1. 1HTTP Message Signatures (RFC 9421) e o que o draft acrescenta
  2. 2O vetor de teste do draft refeito byte a byte
  3. 3Componentes cobertos, validade e replay
  4. 4Identidade não é autorização: a política continua sua

Objetivo: conferir uma assinatura Web Bot Auth com o vetor do draft e verificar pedidos assinados num servidor local, sabendo o que a assinatura não prova.

01Do agente que assina à política do site

draft-ietf-webbotauth-httpsig-protocol-00 (01/09/2026). Clique em cada etapa.

Clique em cada bloco do diagrama para ver o que ele faz.

Rascunho de grupo do IETF (Cloudflare e Google), expira em 05/03/2027. Não é RFC.

02O vetor do draft, refeito

Apêndice E.2.1: Ed25519 com a chave de teste pública do RFC 9421 (B.1.4). Só node:crypto, nenhum pacote.

Terminal · vetor
cd ~/projetos/formacao-webmcp-seguranca-v72/kit
node scripts/wba.mjs vetor; echo "saída: $?"
Exemplo do repositório
== node v24.13.0 · draft-ietf-webbotauth-httpsig-protocol-00 (01/09/2026)
keyid calculado: poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U · confere
assinatura: RdNFx5Bj6au3YgAMQL/RzmUl… · confere
vetor E.2.1: confere
saída: 0

Ed25519 é determinístico: mesma chave e mesma base dão a mesma assinatura. Se a sua implementação refaz o vetor, ela monta a base de assinatura do jeito do draft. A chave de teste nunca vai para produção (anexo C.12 do draft).

03Agente assina, origem confere: sete casos

Chave nova a cada execução. A origem já tem o diretório do agente, como o draft permite (§4.4); nada sai da sua máquina.

Terminal · demo
cd ~/projetos/formacao-webmcp-seguranca-v72/kit
node scripts/wba.mjs demo; echo "saída: $?"
Exemplo do repositório
== node v24.13.0 · draft-ietf-webbotauth-httpsig-protocol-00 (01/09/2026) · origem http://127.0.0.1:36913
1 · sem assinatura → anônimo: sem assinatura (a política do site decide)
2 · assinado, válido → identificado: https://agente.exemplo (chave gw6T0rIc…)
3 · mesma assinatura em outro caminho → recusado: assinatura não confere
4 · assinatura vencida → recusado: assinatura vencida
5 · chave que a origem não conhece → recusado: chave desconhecida para https://agente.exemplo
6 · replay dentro da validade → identificado: https://agente.exemplo (chave gw6T0rIc…)
7 · assinatura mínima (só @authority) usada em /admin → identificado: https://agente.exemplo (chave gw6T0rIc…)
7/7 casos como esperado · replay dentro da validade: aceito
saída: 0

Os casos 6 e 7 são o aviso do draft (§5.2): dentro da validade, quem viu o pedido pode repeti-lo; e uma assinatura que cobre só @authority vale para qualquer caminho do site. Por isso: validade curta e @method + @path cobertos, e a origem pode exigir esses componentes.

04Onde isso já aparece

1. Cloudflare

Desde 01/07/2026, agentes assinados com Web Bot Auth contam como Verified, com um campo novo: Direct (um operador só) ou Intermediary (serviço que muitos usuários comandam).

05Prática

Conferir e decidir.

E16 · Vetor do draft

3 min

Rode o bloco vetor.

Pronto quando: vetor E.2.1: confere e saída: 0.

E17 · Sete casos

10 min

Rode o bloco demo e explique, em uma frase cada, por que os casos 6 e 7 foram aceitos.

Pronto quando: 7/7 casos como esperado · replay dentro da validade: aceito.

E18 · Política do seu site

15 min

Crie politica-bots.md com três linhas, uma por caso, começando por anônimo:, assinado e conhecido: e assinado e desconhecido:, cada uma com o que o site faz (permitir, limitar, bloquear, em quais páginas). Os prefixos ficam em português porque o comando de conferência procura por eles.

Pronto quando: grep -c -E "^(anônimo|assinado e conhecido|assinado e desconhecido):" politica-bots.md → 3.

06Teste da aula

Pergunta 1 de 4

Uma assinatura Web Bot Auth válida prova o quê?competência

07Em três frases

AssinaturaProva quem tem a chave da URL, não intenção nem permissão.
CoberturaValidade curta, @method e @path cobertos; replay existe.
PolíticaAnônimo, conhecido e desconhecido: três regras suas.

Para ir além

Aula anteriorPróxima aula