🚀 Capítulo 07: Cross-Site Scripting (XSS) (Tema: Naruto)
NOTE
Este capítulo utiliza a temática de Naruto para explicar o XSS. Injetar clones de código malicioso na página faz os navegadores dos outros usuários trabalharem para o hacker!
1. 🎯 Objetivo da Aula
Compreender como funciona o ataque de Cross-Site Scripting (XSS), diferenciando XSS Refletido de Armazenado, e aprender a se proteger sanitizando as saídas de dados.
2. 🏢 O Cenário Prático (Seu Desafio)
No anime Naruto, o herói usa o Jutsu Clones das Sombras para criar cópias de si mesmo e atacar por vários lados.
- No ataque de XSS, o hacker cria um “clone” de código malicioso (geralmente em JavaScript).
- Ele injeta esse clone dentro de uma página web legítima (como um comentário em um blog).
- Quando outros usuários entram na página para ler o comentário, o clone do hacker executa no navegador deles!
- O clone pode roubar a senha do usuário, ler seus cookies ou fingir ser a página real para roubar dados.
Seu desafio é impedir que os Clones das Sombras do código malicioso se multipliquem nas telas dos seus usuários!
3. 🧠 Fundamentos: A Teoria Traduzida
O XSS ocorre quando uma aplicação web inclui dados fornecidos pelo usuário em uma página enviada ao navegador, sem a devida validação ou codificação (escape).
👥 Os Dois Tipos Principais:
- XSS Armazenado (Stored XSS):
- Como funciona: O código malicioso é salvo no banco de dados do site (Ex: O hacker posta um comentário contendo
<script>...</script>). Toda vez que alguém abrir aquele post, o script executa. É o mais perigoso!
- Como funciona: O código malicioso é salvo no banco de dados do site (Ex: O hacker posta um comentário contendo
- XSS Refletido (Reflected XSS):
- Como funciona: O código malicioso vem junto com o link (URL). O hacker envia o link falso para a vítima. Quando ela clica, o site “reflete” o código de volta na tela e ele executa.
4. 📖 Exemplo Guiado: O Clone do Roubo de Cookies
Imagine um campo de comentários onde o usuário digita seu texto.
O que o hacker digita no comentário:
Olá! <script>alert('Fui hackeado!');</script>Se o programador apenas mostrar o comentário na tela sem limpar, a página HTML final ficará assim:
<div>
Olá! <script>alert('Fui hackeado!');</script>
</div>O navegador vai ler a tag <script> e vai executar o comando JavaScript, mostrando o alerta na tela de todo mundo que abrir a página!
5. 🛠️ Prática Obrigatória 1: Armazenado ou Refletido?
Diga se a situação descreve um XSS Armazenado ou Refletido:
- O hacker enviou um e-mail para a vítima dizendo: “Veja sua foto aqui:
site.com/busca?q=<script>...”. A vítima clicou e o script rodou na hora. - O hacker preencheu o campo de endereço no perfil dele com um script. Três dias depois, o administrador do site abriu a página de clientes e o script rodou no computador do administrador.
6. 🛠️ Prática Obrigatória 2: Como se defender?
A melhor defesa contra XSS é o Escape de Caracteres (ou Encoding). Significa transformar caracteres especiais do HTML em códigos inofensivos.
Pesquise o que os caracteres < e > viram quando fazemos o escape para HTML (Dica: Eles começam com & e terminam com ;).
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 07 Seguranca) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_12_desenvolvimento_seguro/
├── capitulos/
│ ├── capitulo_07_xss.md
│ └── codigos/
│ └── cap07/
│ └── xss_exemplo.html💡 Checkpoint de Lógica
Muitos frameworks modernos de Frontend (como React, Vue e Angular) já fazem o escape de caracteres automaticamente por padrão! O perigo maior está quando usamos JavaScript puro ou geramos HTML direto no Backend sem cuidado.
10. 🔥 Desafio de Fixação
Pesquise sobre o que é a CSP (Content Security Policy) e como ela ajuda a bloquear a execução de scripts não autorizados na sua página.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Refletido (Veio pela URL e não ficou salvo).
- Armazenado (Ficou guardado no banco de dados e atacou o administrador dias depois).
Gabarito da Prática 2:
O
<vira<(Less Than) e o>vira>(Greater Than).