Pular para o conteúdo
Todos os conceitos

Tratar a saída do modelo

A resposta do modelo é entrada nao confiável; usar adiante sem validar vira injeção em outro sistema.

É fácil tratar a resposta do modelo como se fosse segura, afinal "foi o nosso assistente que escreveu". Mas a resposta depende do que entrou, e o que entrou veio do usuário. Se o app pega o texto do modelo e o usa adiante (coloca numa página como HTML, passa como comando, grava num campo que outra parte interpreta), tudo que vale para a entrada do usuário volta a valer: é entrada nao confiável.

O caso clássico é a resposta do modelo virar HTML sem escape. Se o usuário leva o modelo a responder com <img src=x onerror=...>, e o app injeta isso direto na página, o navegador executa o script: um XSS, só que a carga passou pelo modelo. O mesmo acontece se a saída vira um comando de terminal, uma consulta SQL ou uma chamada a outra API.

O conserto é o de sempre para saída nao confiável: validar e escapar no ponto de uso. Escape de HTML antes de inserir na página, consulta parametrizada antes do banco, lista de permissão antes de uma ação. A resposta do modelo nao é diferente da entrada do usuário.

modelo resposta do modelo <img src=x onerror …> página (sem escape) <div>…</div> navegador executa o script a resposta é entrada nao confiável o conserto: escapar antes de inserir
A resposta do modelo é inserida na página sem escape; um img com onerror na resposta é executado pelo navegador, um XSS que passou pelo modelo.

Aparece nestes desafios