Pense em uma rede social pública. Você pode criar sua conta de usuário e definir seu nome de exibição. Esse nome será visível para qualquer usuário que acessar seu perfil. Nesse cenário, um invasor pode, caso o nome seja renderizado como HTML e não como texto puro, inserir no seu nome de exibição algo como:
<script> <!-- executa um script que pega dados de cookies ou localstorage e envia para um servidor de domínio do atacante > </script>
Os ataques foram categorizados em dois grupos:
- Persistent: quando o dado do ataque é armazenado em algum banco de dados da aplicação alvo e é então disponibilizado para os usuários que acessarem determinada página.
- Non-Persistent: esse tipo de injeção ocorre normalmente através de parâmetros na URL, que são interpretados como script pela aplicação.
Como se prevenir
Todas entradas ou exibição de dados não gerenciados pela aplicação, ou seja que venham por parte do usuário, devem ser sanitizados.
- Remover tags
<script/>
, ou qualquer outra tag HTML, caso o campo não precise dela.
- Utilizar bibliotecas que ajudem a renderizar valores como texto puro, ao invés de HTML.