O XSS ocorre quando um atacante consegue injetar scripts maliciosos (geralmente JavaScript) em páginas web visualizadas por outros usuários.
A execução ocorre no lado do cliente (browser da vítima), e não no servidor.
Tipos de XSS
1. Stored XSS (Persistente)
É o tipo mais perigoso.
O script malicioso é armazenado permanentemente no servidor (ex: em um banco de dados, campo de comentário, perfil de usuário).
Funcionamento: Quando a vítima acessa a página que exibe os dados salvos, o script é executado automaticamente.
2. Reflected XSS (Não-persistente)
O script “reflete” na resposta do servidor.
Ocorre quando a aplicação recebe dados em uma requisição HTTP (geralmente via parâmetros URL ou formulários) e os inclui na página sem a devida sanitização.
A vulnerabilidade existe inteiramente no código do lado do cliente (JavaScript).
O script malicioso é executado através da manipulação do DOM (Document Object Model) no navegador, sem que o payload chegue necessariamente a passar pelo servidor.
O que um atacante pode fazer?
Roubar Cookies de sessão (document.cookie).
Sequestro de conta (Session Hijacking).
Redirecionar o usuário para sites maliciosos.
Modificar o conteúdo da página (Defacement).
Capturar teclas digitadas (Keylogging).
Exemplos de Payloads
<script>alert('XSS')</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href="javascript:alert(1)">Click me</a>
Como Prevenir
Sanitização de Input: Filtrar caracteres especiais.
Encoding de Output: Converter caracteres como < e > em entidades HTML (< e >).
Exemplo em PHP: htmlspecialchars($input).
Content Security Policy (CSP): Header que define quais scripts podem ser executados.
HttpOnly Cookies: Impede que o JavaScript acesse o cookie de sessão.