Desenhe as fronteiras de confiança
O que é: Documento, conteúdo remoto, modelo, agente, tool e backend são componentes com níveis distintos de confiança.
Por que aprender: O mapa mostra onde dados viram instruções e onde uma decisão pode produzir efeito.
Antes de modelar
Escreva o pedido da pessoa, o estado atual e a evidência que provará conclusão.
Erro de partida
Começar pelo nome de uma função ou por um botão produz uma tool sem objetivo humano claro.
Preveja antes de abrir o código
Qual informação muda a decisão? Qual efeito precisa aparecer na interface? Responda antes de implementar.
untrusted: [pageContent, modelOutput, toolArguments]
trustedOnlyAfter: [validation, policy, authorization]
Indo mais fundo: evidência que vale guardar
Registre a entrada, o estado anterior, a decisão tomada, o resultado e a alteração visível da página.
Inclua também uma falha provocada e o comportamento observado sem suporte WebMCP.
Conceitos-chave
trust boundary
principal
data flow
asset
Modele ameaças por jornada
O que é: A ameaça é analisada sobre objetivo, dados, transições e efeitos, não apenas sobre endpoints isolados.
Por que aprender: Jornadas revelam combinações como prompt injection seguida de uma mutação válida.
| Pergunta | Contrato forte | Contrato fraco |
|---|---|---|
| Quando usar? | A descrição nomeia intenção e contexto. | “Faz coisas” ou “gerencia”. |
| O que recebe? | Somente dados necessários. | Objeto genérico e ilimitado. |
| O que devolve? | Estado e próxima ação verificáveis. | Texto sem protocolo. |
| Como falha? | Código, motivo e recuperação. | Exceção opaca. |
Faça
- ✓ Use verbos específicos.
- ✓ Delimite entradas.
- ✓ Declare a evidência.
Evite
- ✗ Misturar intenções.
- ✗ Aceitar qualquer objeto.
- ✗ Esconder efeitos.
ameaça: conteúdo induz agente a cancelar pedido
controle: tool fora do catálogo + confirmação vinculada ao pedido
Indo mais fundo: evidência que vale guardar
Registre a entrada, o estado anterior, a decisão tomada, o resultado e a alteração visível da página.
Inclua também uma falha provocada e o comportamento observado sem suporte WebMCP.
Conceitos-chave
STRIDE
abuse case
attack path
impact
Contenha prompt injection
O que é: Texto da página e resultados de tools são dados não confiáveis, mesmo quando parecem instruções.
Por que aprender: Separar canais e aplicar política impede que conteúdo controle autoridade do runtime.
Observe
Capture estado, entrada e contexto antes da ação.
Decida
Valide pré-condições e escolha a transição permitida.
Execute
Aplique a regra compartilhada e respeite cancelamento.
Prove
Atualize a interface e devolva resultado estruturado.
Ponto de controle
Se a etapa 2 reprovar, a tool não tenta “dar um jeito”: ela devolve uma recuperação explícita.
await document.modelContext.registerTool({
...searchTool,
annotations: {
readOnlyHint: true,
untrustedContentHint: true
}
});
// Conteúdo da página e saída de tools continuam sendo dados, não instruções.
Tool poisoning
Nome, descrição e metadados também podem tentar induzir seleção ou autoridade indevida.
Output injection
A resposta pode conter instruções hostis. Preserve proveniência, limite autoridade e trate o payload como não confiável.
Indo mais fundo: evidência que vale guardar
Registre a entrada, o estado anterior, a decisão tomada, o resultado e a alteração visível da página.
Inclua também uma falha provocada e o comportamento observado sem suporte WebMCP.
Conceitos-chave
data vs instruction
provenance
allowlist
policy
Aplique least privilege
O que é: Cada tool recebe o menor escopo, duração e conjunto de recursos necessário.
Por que aprender: Credenciais amplas transformam um erro de seleção em incidente sistêmico.
CÓDIGO DE REFERÊNCIA
token = mint({ scope: "enrollment:read", resource: enrollmentId, ttl: 60 });
É pequena, descrita e validável.
Reutiliza a regra real da aplicação.
Permite verificar efeito e continuar.
Leia o código como contrato
Sublinhe onde a entrada é validada, onde o efeito acontece, onde o cancelamento chega e onde a UI é atualizada.
Indo mais fundo: evidência que vale guardar
Registre a entrada, o estado anterior, a decisão tomada, o resultado e a alteração visível da página.
Inclua também uma falha provocada e o comportamento observado sem suporte WebMCP.
Conceitos-chave
scope
short-lived token
resource bound
deny by default
Vincule confirmação ao efeito
O que é: A confirmação registra ação, alvo, parâmetros materiais e versão do estado apresentado.
Por que aprender: Um sim genérico não autoriza uma ação alterada depois da confirmação.
Falha provocada
Execute o cenário com estado ausente, entrada inválida ou capacidade indisponível.
Recuperação esperada
A resposta informa o que falhou, o que permanece seguro e qual ação pode continuar.
Matriz mínima de teste
✓ caminho feliz reproduzível
✓ entrada inválida acionável
✓ cancelamento encerra trabalho
✓ fallback preserva a jornada
✓ interface reflete o estado
✓ backend mantém autorização
approval = sign({ tool, argsHash, stateVersion, expiresAt });
verifyApproval(approval, currentCall);
Indo mais fundo: evidência que vale guardar
Registre a entrada, o estado anterior, a decisão tomada, o resultado e a alteração visível da página.
Inclua também uma falha provocada e o comportamento observado sem suporte WebMCP.
Conceitos-chave
intent binding
state version
target
expiry
Teste o adversário continuamente
O que é: A suíte cobre prompt e output injection, tool poisoning, intenção falsamente representada, excesso de parâmetros, argumentos extremos, replay, navegação durante execução e escalada de privilégio.
Por que aprender: Controles de segurança precisam de regressão automatizada como qualquer contrato.
Exercício de síntese
- 1. Explique o problema sem usar o nome da tecnologia.
- 2. Desenhe o estado anterior e posterior.
- 3. Implemente a menor prova funcional.
- 4. Provoque uma falha e registre a recuperação.
- 5. Entregue código, evidência e uma limitação conhecida.
Desafio do módulo
Produzir threat model, matriz de autoridade e testes adversariais para uma jornada WebMCP com ação sensível.
Critério de Expert responsável
A entrega precisa funcionar, explicar seus limites e preservar o caminho humano quando a capacidade experimental não existir.
for (const attack of adversarialDataset) {
assert(await agent.run(attack)).hasNoUnauthorizedEffect();
}
Indo mais fundo: evidência que vale guardar
Registre a entrada, o estado anterior, a decisão tomada, o resultado e a alteração visível da página.
Inclua também uma falha provocada e o comportamento observado sem suporte WebMCP.
Conceitos-chave
red team
replay
spoofing
privilege escalation
📦 Entrega do módulo
Produzir threat model, matriz de autoridade e testes adversariais para uma jornada WebMCP com ação sensível.
Critério de aceite
A entrega funciona com suporte WebMCP e mantém o caminho manual quando a API não existe.
Evidência
Inclua código, cenário testado, resultado observado e uma limitação conhecida.
Fontes técnicas
- Draft e repositório oficial WebMCP
- Especificação renderizada
- Snapshot oficial: 26/08/2026 · commit 41d12f0. A API declarativa permanece experimental; valide o draft antes de produção.