Introdução
O Content Security Policy (CSP) é um mecanismo de segurança que protege aplicações web contra ataques como Cross-Site Scripting (XSS) e injeção de código malicioso. Ele permite definir quais fontes de conteúdo podem ser carregadas pela aplicação, reduzindo a superfície de ataque.
1. Como funciona o CSP?
O CSP é implementado através de um cabeçalho HTTP que instrui o navegador sobre quais recursos podem ser carregados. Com ele, podemos restringir scripts externos, bloquear injeções de código e limitar o carregamento de imagens, estilos e fontes.
2. Configurando CSP no PHP
Podemos definir uma política de segurança no cabeçalho HTTP com header()
:
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://apis.google.com; style-src 'self' https://fonts.googleapis.com;");
Explicação dos parâmetros:
default-src 'self'
: Permite carregar apenas recursos do próprio domínio.script-src 'self' https://apis.google.com
: Permite carregar scripts do próprio site e da API do Google.style-src 'self' https://fonts.googleapis.com
: Restringe estilos a fontes confiáveis.
Isso impede que scripts externos maliciosos sejam executados na aplicação.
3. Modos de implementação do CSP
Podemos aplicar o CSP de diferentes formas:
3.1. Modo apenas de relatório (Report-Only)
Esse modo permite testar a política antes de aplicá-la de forma restritiva:
header("Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint.php");
Isso gera relatórios de violações sem bloquear os recursos.
3.2. Implementação completa
Quando tivermos certeza de que a política não afeta funcionalidades importantes, aplicamos a política definitiva:
header("Content-Security-Policy: default-src 'self';");
4. Monitorando violações do CSP
Podemos capturar e analisar tentativas de violações definindo um endpoint para relatórios:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$dados = file_get_contents("php://input");
file_put_contents("csp_violations.log", $dados . "\n", FILE_APPEND);
}
Isso permite identificar tentativas de ataque e ajustar a política conforme necessário.
Conclusão
A implementação do CSP no PHP melhora significativamente a segurança contra ataques XSS e injeção de scripts maliciosos. Ao restringir fontes de conteúdo confiáveis, reduzimos as chances de execução de código não autorizado e protegemos os usuários contra ameaças externas.
Por que usar Content Security Policy (CSP) no PHP é essencial para segurança?
A implementação de Content Security Policy (CSP) é uma das melhores estratégias para mitigar ataques baseados em injeção de código, como Cross-Site Scripting (XSS). Sem CSP, um invasor pode explorar falhas na aplicação para injetar scripts maliciosos que roubam informações do usuário ou manipulam a interface do site.
Ao configurar corretamente a política de segurança, conseguimos restringir quais fontes externas podem ser carregadas na aplicação. Isso impede que scripts não autorizados sejam executados, mesmo que um atacante tente inseri-los via formulários ou requisições externas.
Outro benefício do CSP é que ele permite um modo de relatório, onde podemos monitorar possíveis violações antes de aplicarmos a política restritiva. Isso ajuda na adaptação do CSP sem comprometer funcionalidades legítimas da aplicação.
Algumas aplicações:
- Proteger contra ataques de *Cross-Site Scripting* (XSS).
- Impedir o carregamento de scripts maliciosos na aplicação.
- Reduzir a superfície de ataque limitando fontes externas confiáveis.
- Monitorar e detectar tentativas de violação de segurança.
Dicas para quem está começando
- Comece aplicando CSP no modo
Report-Only
para monitorar violações antes de bloquear recursos. - Use
default-src 'self'
para restringir carregamentos a fontes confiáveis. - Defina regras específicas para
script-src
,style-src
eimg-src
conforme necessário. - Evite
unsafe-inline
eunsafe-eval
, pois essas diretivas enfraquecem a proteção do CSP. - Monitore violações do CSP usando um endpoint para coletar relatórios de segurança.
Contribuições de Renata Oliveira