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.
- 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:
- 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.
- 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.
- 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 XPQue camada cuida disto?
Para cada proteção, escolha a camada a que ela pertence.
“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”
import html
untrusted = "Prices < 100 & shipping > 3 days"
print(f"<document>{html.escape(untrusted, quote=False)}</document>")<document>Prices < 100 & shipping > 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.
Coloque em tags e escape documentos não confiáveis
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
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.
Pseudonimize os dados pessoais antes do prompt
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
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…