Carregando
0x70Lição 8 de 9

Lide com prompt injection e com dados sensíveis

Entenda o prompt injection, defenda-se em camadas fora do prompt e mantenha os dados sensíveis fora dos prompts.

20 min Questionário com 6 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Explicar o prompt injection direto e o indireto
  • Escolher a camada de defesa certa para cada risco
  • Escapar o conteúdo não confiável e pseudonimizar os dados pessoais antes do prompt

O prompt injection acontece quando um texto que o modelo lê tenta mudar o que ele faz. Pode vir diretamente de um usuário, ou indiretamente de um conteúdo que a aplicação passa para o modelo - um e-mail, uma página da web, um documento ou o resultado de uma ferramenta (Greshake et al., 2023). Isso importa mais quando o modelo pode agir, como mandar mensagens ou chamar APIs.

Nenhuma redação de prompt o impede por completo, então defenda-se em camadas:

  1. Estrutura do prompt - coloque o conteúdo não confiável em tags, escape-o para que ele não consiga sair delas e diga que é um dado a analisar, não instruções a seguir.
  2. Controles da aplicação - ferramentas com menor privilégio, verificação de permissões no código, confirmação humana para ações com consequências e validação de toda saída.
  3. Minimização de dados - mande para o modelo só o que a tarefa precisa, pseudonimize os dados pessoais e nunca coloque segredos nos prompts.

Experimente

Até 15 XP

Que camada cuida disto?

Para cada proteção, escolha a camada a que ela pertence.

0 de 6 classificadosPontuação 0/0
  • “Colocar cada página da web recuperada em tags <document> e escapar o conteúdo dela”

  • “Exigir que o usuário aprove antes de o assistente mandar qualquer e-mail”

  • “Trocar os e-mails e telefones dos clientes por marcadores antes do prompt”

  • “Verificar no código se o usuário logado pode ler um registro antes de ele chegar ao prompt”

  • “Dizer que o texto dentro de <document> é um dado a resumir, não instruções”

  • “Manter as chaves de API fora dos prompts de sistema”

escape.py
import html
untrusted = "Prices < 100 & shipping > 3 days"
print(f"<document>{html.escape(untrusted, quote=False)}</document>")
Saída
<document>Prices &lt; 100 &amp; shipping &gt; 3 days</document>

Principais conclusões

  • O injection pode chegar por qualquer coisa que o modelo lê, não só pelo usuário.

  • A estrutura do prompt ajuda; os controles da aplicação e a minimização de dados é que protegem de verdade.

  • Escape o texto não confiável, exija confirmação para ações e mantenha os dados sensíveis de fora.

Quiz da aula

6 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em Python

Escreva código Python no editor e execute os testes com exemplos. O Python roda localmente no navegador usando WebAssembly.

Exercício 1

Coloque em tags e escape documentos não confiáveis

+25 XP

Cada linha da entrada é um documento não confiável. Imprima cada um como <document index="N">TEXT</document>, com TEXT escapado por html.escape(text, quote=False), para que caracteres como <, > e & não sejam lidos como tags.

  • Dois documentos
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Exercício 2

Pseudonimize os dados pessoais antes do prompt

+25 XP

Leia uma linha de texto. Troque os endereços de e-mail por [EMAIL_1], [EMAIL_2], … e depois os números de telefone por [PHONE_1], … - numerados na ordem em que aparecem pela primeira vez, com valores repetidos reaproveitando o seu marcador. Use os padrões fornecidos.

Imprima o texto mascarado, depois kept locally: e cada linha PLACEHOLDER = value, ordenadas pelo nome do marcador (a sua aplicação guardaria esse mapa para restaurar os nomes na resposta).

  • Uma mensagem de suporte
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…