🚀 Capítulo 08: CSRF (Cross-Site Request Forgery) (Tema: Star Wars)
NOTE
Este capítulo utiliza a temática de Star Wars para explicar o CSRF. Forjar ordens do Imperador usando a autoridade dele é o truque mais sujo da galáxia!
1. 🎯 Objetivo da Aula
Compreender como funciona o ataque de CSRF (Falsificação de Solicitação entre Sites) e aprender a se proteger usando Tokens Anti-CSRF e boas práticas de cookies.
2. 🏢 O Cenário Prático (Seu Desafio)
O Imperador Palpatine está logado no painel de controle da Estrela da Morte no seu navegador.
- Ele tem a autoridade máxima. O navegador dele guarda os cookies de sessão que provam quem ele é.
- O hacker (um espião rebelde) cria um site falso sobre “Gatinhos da Galáxia” e envia o link para o Imperador.
- O Imperador clica no link para ver os gatinhos.
- Escondido no código da página dos gatinhos, há um comando invisível que faz o navegador do Imperador enviar uma requisição para a Estrela da Morte dizendo:
POST /atirar?alvo=Alderaan. - O sistema da Estrela da Morte recebe a ordem, vê que os cookies do Imperador estão anexados e executa o tiro!
Isso é o CSRF. O hacker não roubou a senha do Imperador; ele apenas usou a sessão que já estava aberta para forjar uma ordem! Seu desafio é não deixar que ordens falsas sejam executadas!
3. 🧠 Fundamentos: A Teoria Traduzida
O CSRF (Cross-Site Request Forgery) acontece porque os navegadores web enviam automaticamente os cookies salvos de um site toda vez que você faz uma requisição para aquele site, mesmo que você esteja clicando em um link de outro site completamente diferente!
🛡️ Como nos defendemos? (O Token CSRF):
A defesa mais comum é o uso de um Token Anti-CSRF.
- Quando o usuário legítimo carrega a página do formulário, o servidor gera um código secreto único (o Token) e o esconde dentro do formulário.
- Quando o usuário clica em enviar, o servidor verifica: “A requisição veio com o Token secreto?“.
- Se o hacker tentar forjar a requisição de outro site (como o site dos gatinhos), ele não sabe qual é o token secreto e o servidor bloqueia o ataque!
4. 📖 Exemplo Guiado: O Formulário Forjado
Imagine o código que o hacker coloca no site dele para atacar a vítima:
<!-- Site do Hacker (Gatinhos da Galáxia) -->
<h1>Veja que fofinho!</h1>
<img src="gatinho.jpg">
<!-- Formulário invisível que ataca o banco da vítima -->
<form action="https://bancovictima.com/transferir" method="POST" id="hack">
<input type="hidden" name="conta" value="conta_do_hacker">
<input type="hidden" name="valor" value="1000">
</form>
<script>
// Envia o formulário automaticamente assim que a página carrega!
document.getElementById('hack').submit();
</script>5. 🛠️ Prática Obrigatória 1: CSRF vs XSS
Muitas pessoas confundem XSS com CSRF. Diga qual ataque aconteceu em cada caso:
- O hacker conseguiu fazer um script rodar dentro da página do site, mostrando um alerta e roubando dados que o usuário digitou.
- O hacker fez o usuário clicar em um link no e-mail que, sem o usuário perceber, mandou uma mensagem no Facebook dele dizendo “Eu amo o Império!“.
6. 🛠️ Prática Obrigatória 2: O Cookie SameSite
Uma defesa moderna contra CSRF é configurar o cookie de sessão com o atributo SameSite=Strict.
- Pesquise o que esse atributo faz com o comportamento do navegador ao enviar cookies em links que vêm de outros sites.
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 08 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_08_csrf.md
│ └── codigos/
│ └── cap08/
│ └── ataque_csrf.html💡 Checkpoint de Lógica
O CSRF só funciona para ações que alteram dados (POST, PUT, DELETE). Requisições do tipo GET (que apenas buscam dados) não devem nunca realizar ações como transferir dinheiro ou apagar contas!
10. 🔥 Desafio de Fixação
Pesquise se as APIs modernas que usam Tokens JWT (em vez de Cookies) sofrem do ataque de CSRF tradicional e por quê.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- XSS (O código rodou dentro do site).
- CSRF (O usuário executou uma ação forjada em outro site sem saber).