Aula 13 - Proteções para Aplicações Web 🛡️
Objetivo
Objetivo: Aprender as defesas práticas contra XSS, CSRF e outras vulnerabilidades comuns, e conhecer os cabeçalhos HTTP de segurança que toda aplicação web moderna deveria usar.
1. XSS (Cross-Site Scripting): a Defesa 🖼️
Ocorre quando dados fornecidos pelo usuário são exibidos na página sem escapar caracteres especiais de HTML, permitindo injetar scripts.
<!-- Comentário de usuário exibido sem tratamento -->
<div>Comentário: <script>roubarCookies()</script></div>
Regra de ouro contra XSS
Nunca confie em dados do usuário. Sempre escape (ou use frameworks que escapam automaticamente, como React/Vue) qualquer conteúdo dinâmico antes de renderizá-lo como HTML.
2. CSRF (Cross-Site Request Forgery) 🎭
Um ataque que engana o navegador da vítima para que ele envie uma requisição indesejada a um site onde ela já está autenticada — sem que ela perceba.
Defesas principais: 1. Token CSRF: um valor único, verificado a cada requisição que altera dados. 2. Cookies SameSite: impedem que o cookie de sessão seja enviado em requisições vindas de outros domínios.
3. Cabeçalhos HTTP de Segurança 📋
| Cabeçalho | O que faz |
|---|---|
Content-Security-Policy | Restringe de onde scripts/estilos podem ser carregados, mitigando XSS |
X-Content-Type-Options: nosniff | Impede o navegador de "adivinhar" o tipo de arquivo, evitando alguns ataques |
X-Frame-Options: DENY | Impede que o site seja carregado dentro de um <iframe> (proteção contra clickjacking) |
Strict-Transport-Security | Força o navegador a sempre usar HTTPS para aquele domínio |
4. Segurança em Dependências 📦
Boa parte das vulnerabilidades reais não está no código próprio — está nas bibliotecas de terceiros usadas pelo projeto (categoria "Vulnerable Components" do OWASP Top 10).
Ferramentas como pip-audit, npm audit e o Dependabot do GitHub automatizam essa verificação continuamente.
5. Validação de Entrada: a Primeira Linha de Defesa 🚧
A maioria das vulnerabilidades deste módulo (SQL Injection, XSS, e outras) compartilha uma raiz comum: confiar em dados do usuário sem validar. Validar tipo, tamanho e formato de toda entrada, no backend (nunca só no frontend), é a defesa mais barata e eficaz.
6. Mini-Projeto: Auditoria de Cabeçalhos 🚀
- Escolha 3 sites que você usa no dia a dia.
- Para cada um, rode
curl -sI <site>e verifique quais cabeçalhos de segurança da tabela da seção 3 estão presentes. - Monte uma tabela comparativa: qual site está mais bem protegido?
- Para o site com menos cabeçalhos, sugira quais ele deveria adicionar.
7. Exercício de Fixação 🧠
- Explique com suas palavras como funciona um ataque CSRF.
- Para que serve o cabeçalho
Content-Security-Policy? - Por que dependências desatualizadas são consideradas um risco, mesmo que seu código próprio esteja correto?
Próxima Aula: Fim do Módulo 4! A segurança encontra a legislação: LGPD e Privacidade 📜