IA em DjangoTodos os guias

Django · Segurança de IA

Prompt injection em Django: o que é e como reduzir o risco

Uma instrução maliciosa pode chegar como mensagem do usuário ou conteúdo recuperado por uma busca. O controle essencial é limitar o que o modelo pode influenciar — e manter as decisões de segurança no servidor.

Guia prático · Atualizado em 8 de outubro de 2026

O que significa prompt injection

Em uma aplicação tradicional, dados do usuário não deveriam se transformar em instruções de programa. Com modelos de linguagem, instruções e texto de entrada aparecem juntos no contexto. Uma mensagem pode pedir que o modelo ignore a tarefa, revele conteúdo ou produza algo que a aplicação não esperava.

O risco cresce quando o modelo pode chamar ferramentas, acessar documentos privados ou iniciar ações. Instruções no prompt podem orientar o modelo, mas não são uma fronteira de segurança: não conceda ao modelo autoridade que o servidor não está preparado para limitar.

Defesas em camadas para uma aplicação Django

  1. Faça autorização no servidor. Confira a identidade do usuário, seu papel e o objeto acessado antes de buscar documentos ou executar uma ação. Não peça ao modelo para decidir quem tem permissão.
  2. Reduza o acesso. Envie apenas o contexto necessário. Separe dados entre clientes e aplique o escopo de acesso na consulta do Django, antes de montar o prompt.
  3. Limite ferramentas. Exponha operações específicas com argumentos validados. Não dê acesso genérico a shell, SQL, sistema de arquivos ou funções arbitrárias.
  4. Peça uma saída estruturada e valide depois. Confirme esquema, enumerações, tipos, comprimentos e referências com regras de negócio independentes.
  5. Exija uma confirmação humana para ações sensíveis. Cancelamentos, estornos, envio externo ou alteração de permissões merecem autorização explícita e registros apropriados.
  6. Teste o que pode dar errado. Inclua entradas adversariais nos testes e verifique que nenhuma saída consegue pular a autorização ou iniciar uma ação não permitida.
# Exemplo: limite o registro à conta autorizada antes de criar o contexto.
# A checagem de escopo acontece no Django, não no prompt.
ticket = get_object_or_404(
    Ticket.objects.filter(customer__user=request.user),
    pk=ticket_id,
)
contexto = montar_contexto(ticket)

Trate a saída do modelo como não confiável

A saída também precisa de fronteiras claras. Se for exibida em HTML, faça escape apropriado. Se trouxer URLs, aceite apenas os destinos esperados. Se incluir destinatários, IDs ou valores, valide esses dados e confronte-os com o estado do servidor. Nunca transforme texto gerado em comando executável.

Para ações externas, combine autorização, validação e idempotência. Repetir uma chamada de rede depois de um timeout pode gerar um segundo efeito, mesmo que a primeira tentativa tenha sido concluída. Uma restrição de unicidade no banco e uma chave de idempotência apropriada ajudam a impedir duplicidade.

Segurança de IA não é uma instrução mágica no prompt: é reduzir permissões, validar entradas e saídas e deixar ações importantes sob controle do código e dos testes.