O que é XSS (Cross-Site Scripting) e como corrigir
Cross-Site Scripting (XSS) é uma das vulnerabilidades mais comuns da web. Entenda como funciona, por que é perigoso e como proteger sua aplicação.
O que é XSS
XSS (Cross-Site Scripting) é uma vulnerabilidade que permite a um atacante injetar código JavaScript malicioso em páginas web visualizadas por outros usuários. Quando o navegador da vítima executa esse código, o atacante pode roubar cookies de sessão, redirecionar para sites falsos, capturar teclas digitadas ou modificar o conteúdo da página.
Existem três tipos principais:
- Reflected XSS: o payload é enviado na requisição (URL ou formulário) e refletido na resposta sem sanitização.
- Stored XSS: o payload é armazenado no servidor (banco de dados, comentários) e exibido para outros usuários.
- DOM-based XSS: o payload é processado diretamente no JavaScript do cliente, sem passar pelo servidor.
Por que é perigoso
XSS é classificado como severidade crítica ou alta porque permite:
- Roubo de sessão (session hijacking) via cookies
- Phishing dentro do próprio site legítimo
- Keylogging e captura de credenciais
- Distribuição de malware para visitantes
- Deface do site (alteração visual)
- Execução de ações em nome do usuário autenticado
Segundo a OWASP Top 10, XSS aparece consistentemente entre as vulnerabilidades mais exploradas da web. Um único campo sem sanitização pode comprometer todos os usuários do sistema.
Como o SAFETAGGY detecta
O SAFETAGGY utiliza duas camadas de detecção:
- Varredura básica: injeta payloads de teste em parâmetros de formulários e URLs, verificando se são refletidos na resposta sem encoding. Também analisa a presença de headers CSP que mitigam XSS.
- Deep Scan (pentest IA): utiliza o dalfox, ferramenta especializada em detecção de XSS, para testar centenas de vetores de ataque incluindo bypasses de WAF, DOM-based XSS e contextos HTML/JS/atributo.
Faça uma varredura agora para verificar se seu site está vulnerável.
Como corrigir
A proteção contra XSS exige múltiplas camadas. Abaixo estão as correções mais eficazes para cada contexto.
1. React / Next.js (auto-escaping)
React escapa automaticamente valores em JSX. O risco aparece ao usar dangerouslySetInnerHTML. Se precisar renderizar HTML do usuário, sanitize antes:
import DOMPurify from 'dompurify';
// Sanitizar HTML antes de renderizar
const cleanHTML = DOMPurify.sanitize(userInput, {
ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p'],
ALLOWED_ATTR: ['href', 'target'],
});
// No componente React
<div dangerouslySetInnerHTML={{ __html: cleanHTML }} />2. Express.js (middleware de sanitização)
import helmet from 'helmet';
import xss from 'xss-clean';
const app = express();
// Helmet configura CSP e outros headers de segurança
app.use(helmet());
// Middleware que sanitiza req.body, req.query, req.params
app.use(xss());3. Content Security Policy (CSP)
O header CSP é a defesa mais eficaz contra XSS. Ele impede a execução de scripts inline e de origens não autorizadas:
// next.config.js — CSP rigoroso
const securityHeaders = [
{
key: 'Content-Security-Policy',
value: [
"default-src 'self'",
"script-src 'self' 'nonce-{RANDOM}'",
"style-src 'self' 'unsafe-inline'",
"img-src 'self' data: https:",
"connect-src 'self' https://api.example.com",
"frame-ancestors 'none'",
].join('; '),
},
];4. Nginx (headers de proteção)
# /etc/nginx/conf.d/security.conf
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "0" always; # Desativado em favor do CSPImportante: o header X-XSS-Protection foi descontinuado pelos navegadores modernos. Use CSP como substituto.
Checklist de prevenção
- Sempre faça output encoding ao exibir dados do usuário
- Nunca use
eval()ouinnerHTMLcom dados não confiáveis - Configure Content Security Policy (CSP) em todas as páginas
- Use cookies com flags
HttpOnlyeSecure - Valide e sanitize inputs no servidor, nunca apenas no cliente
- Use frameworks que fazem auto-escaping (React, Vue, Angular)
Teste seu site agora
O SAFETAGGY verifica automaticamente se seu site está vulnerável a XSS e outras dezenas de falhas de segurança. Resultado em menos de 60 segundos.
Fazer varredura gratuita