Cross-Site Scripting (XSS)

O que é?

  • 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.
  • Exemplo: http://site.com/search?q=<script>alert(1)</script>

3. DOM-based XSS

  • 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 (&lt; e &gt;).
    • 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.